2016-04-18 8 views
2

So habe ich eine Map<int, Map<int, string>> Datenstruktur, und ich kann sie auch wie so ausdrucken:initialisieren Sequenz von formatierten Map

aMap 
|> Map.iter(fun key value -> value 
|> Map.iter(fun k v -> printf "Foo: %d\nBar: %d\nValue: %s" key k v)) 

Dies funktioniert gut, aber ich möchte versuchen und Kartenelemente hängen Sie mit String-Formatierung wie oben zu einem seq<string>

Was wäre der effektivste Weg, dies zu tun und trotzdem "funktional" zu sein?

+3

Können Sie näher erläutern, was Sie tun möchten? –

+0

@MarkSeemann Ziemlich viel, holen Sie die Werte aller verbundenen Werte in der Karte, wenden Sie diese auf eine formatierte Zeichenkette an (wie das printf oben), und speichern Sie sie in einer Seq . Ich denke, ich habe es fast dank der Hilfe von s952163 – Hayden

Antwort

2

Sie können jederzeit Ihre Karte zu einer Sequenz umwandeln: aMap |> Map.toSeq

Sie auch Map.map für andere Transformationen (statt Map.iter) verwenden können.

Generell hilft es, durch den Referenzteil der Sammlungen Sie gehen verwenden: https://msdn.microsoft.com/ja-jp/library/ee353880.aspx

EDIT:

aMap 
|> Map.toSeq 
|> Seq.collect(fun (k,v) -> 
    v 
    |> Map.toSeq 
    |> Seq.map(fun (x,y) -> sprintf "Foo: %d Bar: %d Value: %s" k x y)) 
|> Seq.iter(printfn "%A") 

Version 2:

aMap 
|> Seq.collect(fun x -> 
    x.Value 
    |> Seq.map(fun y -> sprintf "Foo: %d Bar: %d Value: %s\n" x.Key y.Key y.Value)) 
|> Seq.iter(printfn "%A") 

https://dotnetfiddle.net/Il5zv9

+0

Wie würde ich auch in der Lage sein, die Zeichenfolge Formatierung sowie – Hayden

+0

verwenden Map.map und anstelle von printf nur bauen Sie Ihre Zeichenfolge mit "Foo" + Taste – s952163

+0

lassen Ich weiß, ob das für dich funktioniert hat oder ob du mich nur im Chat anpingst. – s952163