首页 > 解决方案 > 如何从列表列表中的两个索引创建一个元组?

问题描述

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

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

我写了类似的东西

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。任何提示都会很棒。

标签: listfunctional-programmingf#

解决方案


目前还不是 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)]

推荐阅读