contras ::operador de sequências em F#?
Pergunta
Existe um melhor código que não precisa para transformar a seqüência de uma lista ?
let rec addentry map keys =
match keys with
| ((i,j) :: tail) -> Map.add (i,j) ((inputd.[i]).[j]) (addentry map tail)
| ([]) -> map
addentry Map.empty (Cartesian keys1 keys2 |> Seq.toList)
Solução
Este é um ótimo lugar para usar Seq.fold
.Ele recolhe uma coleção para baixo em um único valor.
Cartesian keys1 keys2
|> Seq.fold (fun map (i, j) ->
let value = (inputd.[i]).[j]
Map.add (i, j) value map) Map.empty
Outras dicas
Cartesian keys1 keys2
|> Seq.map (fun (i, j) -> ((i, j), (inputd.[i]).[j]))
|> Map.ofSeq
Como complemento às respostas anteriores, se você quer ser capaz de padrões de correspondência de sequências, você pode definir um padrão ativo:
let (|Cons|Nil|) s =
if Seq.isEmpty s then
Nil
else
Cons(Seq.head s, Seq.skip 1 s)
let rec addentry map keys =
match keys with
| Cons((i,j), tail) -> Map.add (i,j) ((inputd.[i]).[j]) (addentry map tail)
| Nil -> map
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow