我有一個元組列表中有三個值的元組列表f#一個列表到另一個列表?
我想從元組中創建一個新的字符串列表。
List [(string * string * int) ]
List[ for i in columns -> i.getfirstvalueintuple]
我該怎麼做?非常基本的問題,但我無法弄清楚。
還有沒有其他方式建立另一種列表或seq從現有列表中?
我有一個元組列表中有三個值的元組列表f#一個列表到另一個列表?
我想從元組中創建一個新的字符串列表。
List [(string * string * int) ]
List[ for i in columns -> i.getfirstvalueintuple]
我該怎麼做?非常基本的問題,但我無法弄清楚。
還有沒有其他方式建立另一種列表或seq從現有列表中?
seq { for (first, _, _) in lst do yield first };;
這給出了一個序列。您也可以使用List.map
:
lst |> List.map (fun (first, _, _) -> first);;
其中給出了一個列表。
你只需要一個List.map與「項目」功能:
let newList = List.map (fun (x, _, _) -> x) orgList
的List.map
接受一個函數和一個列表和功能適用於每個項目在列表中。 (fun (x, _, _) -> x)
解包元組並返回第一個項目。
HTH, 羅布
如果你想你也可以做到這一點的值的2/3:
let newList = oldList |> List.collect (fun (a,b,_) -> [a;b])
內置函數fst
提取元組的第一個元素,所以你可以地圖fst
在名單:
lst |> List.map fst
(* 'a*'b*'c list -> 'a list *)
'fst'和'snd'只能在2元組上工作。 – Brian 2010-06-18 09:21:54
由於它的偉大工程 也可以請你描述一下;;在list.map語句的末尾。試圖找到msdn的參考,但無法找到它 – mamu 2010-06-17 17:33:56
@mamu它是特定於交互式shell(fsi)。它會終止輸入並進行評估。你可以刪除它們。 – Artefacto 2010-06-17 17:47:24
請注意,你也可以做一個'[for(first,_,_)in firstst yield first]'這與seq語法相同,但立即給出一個列表 – 2010-06-17 18:27:30