f # один список в другой? - PullRequest
3 голосов
/ 17 июня 2010

У меня есть список кортежей с тремя значениями в кортежах

Я хочу создать новый список строк из предыдущего списка с одним значением из кортежей.

List [(string * string * int) ]

List[ for i in columns -> i.getfirstvalueintuple]

Как я могу это сделать? очень простой вопрос, но я не могу понять его.

Также есть ли другой способ создания списка другого типа или секвенции из существующего списка?

Ответы [ 4 ]

8 голосов
/ 17 июня 2010

Вам просто нужен List.map с функцией 'project':

let newList = List.map (fun (x, _, _) -> x) orgList

List.map берет функцию и список и применяет функцию к каждому элементу в списке. (fun (x, _, _) -> x) распаковывает кортеж и возвращает первый элемент.

НТН, Rob

8 голосов
/ 17 июня 2010
seq { for (first, _, _) in lst do yield first };;

Это дает последовательность. Вы также можете использовать List.map:

lst |> List.map (fun (first, _, _) -> first);;

Что дает список.

0 голосов
/ 18 июня 2010

Встроенная функция fst извлекает первый элемент кортежа, поэтому вы можете просто отобразить fst в списке:

lst |> List.map fst

(* 'a*'b*'c list -> 'a list *)
0 голосов
/ 17 июня 2010

Если вы хотите 2/3 значений, вы также можете сделать это:

let newList = oldList |> List.collect ( fun (a,b,_) -> [a;b])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...