我目前对F#很感兴趣,因为它与我以前使用的任何东西都不同。 我需要访问包含在大型列表中的每个列表的第一个元素。 如果我假设主列表包含'x'个列表,这些列表本身包含5个元素,那么访问每个第一个元素的最简单方法是什么。
let listOfLists = [[1; 2; 3; 4; 5]; [6; 7; 8; 9; 10]; [11; 12; 13; 14; 15]]
我的期望输出将是包含[1; 6; 11]的新列表。
我目前所拥有的:
let rec firstElements list =
match list with
| list[head::tail] ->
match head with
| [head::tail] -> 1st @ head then firstElements tail
进一步扩展这个问题,我如何获取所有第二个元素?是创建新列表而不包含第一个元素(通过类似的函数去除它们),然后重新使用相同的函数最好吗?
int option
列表,而不是int
列表。 - Taylor WoodList.head
获得错误。 - PandemoniumList.head
外,还有一个名为List.tryHead
的函数,它与本答案中的firstElements
函数完全相同。在 F# 中,通常情况下,任何有可能失败的函数(例如List.head
在空列表上会失败)都会有一个具有try
前缀的版本,该版本返回一个选项(Option)。因此,List.head
返回一个int
类型的值但可能会抛出异常;List.tryHead
返回一个int option
类型的值,并且永远不会抛出异常。如果您知道您的列表永远不会为空,则使用List.head
更容易。如果它们可能为空,则使用List.tryHead
让您需要处理这两种情况。 - rmunn