2012-07-04 4 views
0

Я очень (очень) новый для F #, и я немного почесываю голову над небольшой проблемой. У меня есть string list list, который я пытаюсь манипулировать и преобразовывать. Это, вероятно, тривиально.Разбиение списка списка строк

следующие данные считываются из файла CSV:

1,ABC,3 
1,DEF,3 
1,XYZ,1 
2,ABC,2 
2,XYZ,1 
3,DEF,2 
3,XYZ,2 

Что правильно или неправильно, я читаю в string list list. Эти данные представляют собой ненормированный набор данных, где поле с индексом 0 на каждой записи является полем Идентификатор. На данный момент я просто пытаюсь разделить внешний список так, что я в конечном итоге с string list list list, представляющий следующее:

1,ABC,3  2,ABC,2  3,DEF,2 
1,DEF,3  2,XYZ,1  3,XYZ,2 
1,XYZ,1 

Вышеприведенные результаты будут затем толкнул в мою типизированных модель и подается в остальную приложения.

ответ

1

В коде:

csvRecords 
|> Seq.groupBy (fun record -> (record.Item 0)) 
|> List.ofSeq 
|> List.map(toTypedModel) 

record.Item 0 не является хорошим способом, чтобы получить первый элемент списка. Вы должны либо использовать List.head, либо шаблон для этой цели.

Ваш пример будет выглядеть так:

csvRecords 
|> Seq.groupBy List.head 
|> Seq.map toTypedModel 
|> List.ofSeq 

Я также изменил порядок использования toTypedModel с последовательностью, это помогает избежать выделения ненужного списка.

+0

Это имеет смысл, я пошел с этим - «List.head» - это место! – SaxonMatt

1

Использование Seq.groupby -

input 
|> Seq.groupBy (fun (a,b,c) -> a) 
|> Seq.toList 
+0

Спасибо, Джон. Я уже использовал 'Seq.groupBy', но список из 2 кортежей полностью вернулся ко мне. С тех пор я понял больше о том, как обращаться с кортежами, поэтому возвращение к вашему ответу сделало трюк! Теперь в функции, с которой отображается результат этой функции, я просто разбиваю кортеж на его части. Я знал, что это будет тривиально. – SaxonMatt

+0

@JohnPalmer: 'List.toSeq' лишний и' Seq.GroupBy/Seq.Groupby' находятся в неправильных случаях. – pad

+0

@pad - вот что происходит, когда я не тестирую с помощью компилятора –

Смежные вопросы