Dividir una lista de cadenas de caracteres

Soy bastante (muy) nuevo en F # y me estoy rascando la cabeza por un pequeño problema. tengo un string list list que estoy tratando de manipular y transformar. Esto es probablemente trivial.

Los siguientes datos se están leyendo desde un archivo CSV:

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

Que bien o mal, estoy leyendo en un string list list. Estos datos representan un conjunto de datos no normalizados, donde el campo en el índice 0 en cada registro hay un campo Identificador. En este momento solo estoy tratando de dividir la lista externa para terminar con una string list list list representando lo siguiente:

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

Los resultados anteriores se insertarán en mi modelo Typed y se incorporarán al resto de la aplicación.

preguntado el 04 de julio de 12 a las 10:07

2 Respuestas

En tu código:

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

record.Item 0 no es una buena manera de obtener el primer elemento de una lista. Deberías usar List.head o coincidencia de patrones para ese propósito.

Tu ejemplo se vería así:

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

También cambié el orden para usar toTypedModel con secuencia, ayuda a evitar la asignación de una lista innecesaria.

Respondido 04 Jul 12, 11:07

Eso tiene sentido, me he ido con eso - el List.head es perfecto! - SajónMatt

Utiliza la Seq.groupby -

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

Respondido 04 Jul 12, 11:07

Gracias John - había usado Seq.groupBy ya, pero la Lista de 2 tuplas volvió a través de mí completamente. Desde entonces, he entendido más sobre cómo lidiar con las tuplas, ¡así que volver a tu respuesta ha funcionado! Ahora, en la función a la que se asigna el resultado de esta función, solo divido la tupla en sus partes. Sabía que sería trivial. - SajónMatt

@JohnPalmer: List.toSeq es superfluo y Seq.GroupBy/Seq.Groupby están en casos equivocados. - almohadilla

@pad - eso es lo que sucede cuando no pruebo con el compilador - John Palmer

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.