访问列表列表中的第一个元素 [F#]
Accessing the first elements in a list of Lists [F#]
我目前对 F# 很感兴趣,因为它与我以前使用过的所有东西都不一样。我需要访问包含在一个大列表中的每个列表的第一个元素。
如果我假设主列表包含 'x' 个本身包含 5 个元素的列表,那么访问每个第一个元素的最简单方法是什么。
让 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
然后对此进行扩展,我将如何获得所有第二个元素?是否最好创建没有第一个元素的新列表(通过使用类似的函数删除它们)然后重新使用相同的函数?
您可以使用map来提取每个子列表的头元素:
let firstElements li =
match li with [] -> None | h::_ -> Some h
let myfirstElements = List.map firstElements listOfLists
我使用的是 Ocaml 的 speak,对 F# 几乎没有查找,所以这可能不准确,但这个想法适用。
EDIT:您也可以使用 List.head
使它更简洁并且 return 一个 int list
而不是 int option list
.但是,如果您点击一个空列表,它会抛出异常。大多数时候,我会避免在这种情况下使用 List.head
或 List.tail
。
访问列表第一个元素的最简单方法是List.head
。因为你有一个列表列表,你只需要List.map
这个函数:
let listOfLists = [ [1;2;3;4;5]; [6;7;8;9;10]; [11;12;13;14;15] ]
listOfLists
|> List.map List.head
//val it : int list = [1; 6; 11]
现在,如果您需要访问其他元素,您可以使用 List.item
或仅使用 xs.[1]
索引到您的列表中。但请记住,对于大型列表,这将是低效的,如果您想快速查找,请使用数组。
listOfLists
|> List.map (List.item 1)
//val it : int list = [2; 7; 12]
有索引:
listOfLists
|> List.map (fun x -> x.[1])
我目前对 F# 很感兴趣,因为它与我以前使用过的所有东西都不一样。我需要访问包含在一个大列表中的每个列表的第一个元素。 如果我假设主列表包含 'x' 个本身包含 5 个元素的列表,那么访问每个第一个元素的最简单方法是什么。
让 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
然后对此进行扩展,我将如何获得所有第二个元素?是否最好创建没有第一个元素的新列表(通过使用类似的函数删除它们)然后重新使用相同的函数?
您可以使用map来提取每个子列表的头元素:
let firstElements li =
match li with [] -> None | h::_ -> Some h
let myfirstElements = List.map firstElements listOfLists
我使用的是 Ocaml 的 speak,对 F# 几乎没有查找,所以这可能不准确,但这个想法适用。
EDIT:您也可以使用 List.head
使它更简洁并且 return 一个 int list
而不是 int option list
.但是,如果您点击一个空列表,它会抛出异常。大多数时候,我会避免在这种情况下使用 List.head
或 List.tail
。
访问列表第一个元素的最简单方法是List.head
。因为你有一个列表列表,你只需要List.map
这个函数:
let listOfLists = [ [1;2;3;4;5]; [6;7;8;9;10]; [11;12;13;14;15] ]
listOfLists
|> List.map List.head
//val it : int list = [1; 6; 11]
现在,如果您需要访问其他元素,您可以使用 List.item
或仅使用 xs.[1]
索引到您的列表中。但请记住,对于大型列表,这将是低效的,如果您想快速查找,请使用数组。
listOfLists
|> List.map (List.item 1)
//val it : int list = [2; 7; 12]
有索引:
listOfLists
|> List.map (fun x -> x.[1])