如何从列表中的两个索引中生成元组?

时间:2019-10-19 17:25:14

标签: list functional-programming f#

我目前有一个列表,其中包含其他列表。 [[1,2,3]; [9,8,7]; ...]

我想从我在整个列表中存储的这3个元素列表之一中的两个索引创建一个元组列表。

我写了类似的东西

let makeTuple list = 
  let rec tuple list tuplesList = 
    match list with 
    | [] -> ()
    | h::t -> (tuple t ( (List.item 2 list, List.item 5 list)::tuplesList))

  tuple list []

当我运行此函数时,它给我一个错误,即索引超出范围。我尝试了其他选项,但似乎无法理解其中的任何一个。我是F-sharp的新手:-S。任何提示都很棒。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚100%您期望什么输出。但是此修订版本至少可以运行并返回一个元组列表,所以也许它接近您想要的。

let makeTuple list = 
  let rec tuple list tuplesList = 
    match list with 
    | [] -> tuplesList
    | h::t -> (tuple t ( (List.item 0 h, List.item 2 h)::tuplesList))

  tuple list []

let lst = [ [1; 2; 3]; [9; 8; 7]; [14; 15; 16]]

lst |> makeTuple

输出:

val makeTuple : list:'a list list -> ('a * 'a) list
val lst : int list list = [[1; 2; 3]; [9; 8; 7]; [14; 15; 16]]
val it : (int * int) list = [(14, 16); (9, 7); (1, 3)]