Zugriff auf ein bestimmtes Element in einer F # Tupel
Frage
In F # -Code Ich habe ein Tupel:
let myWife=("Tijana",32)
Ich will jedes Mitglied zuzugreifen des Tupels getrennt. Zum Beispiel das, was ich erreichen, indem mag ich kann nicht
Console.WriteLine("My wife is {0} and her age is {1}",myWife[0],myWife[1])
Dieser Code nicht offensichtlich nicht funktioniert, indem ich glaube, Sie sammeln können, was ich erreichen will.
Lösung
Sie möchten, dass Ihre Frau verhindern, dass Altern von ihrem Alter unveränderlich zu machen? :)
Für ein Tupel, das nur zwei Mitglieder enthält, können Sie fst
und snd
die Mitglieder des Paares zu extrahieren.
let wifeName = fst myWife;
let wifeAge = snd myWife;
Für längere Tupeln, werden Sie die Tupel in andere Variablen auspacken. Zum Beispiel
let _, age = myWife;;
let name, age = myWife;;
Andere Tipps
Eine andere sehr nützlich ist, dass Mustervergleich (wie wenn Elemente Extrahieren mit „let“ Bindung) können auch in anderen Situationen verwendet werden, zum Beispiel, wenn das Schreiben einer Funktion:
let writePerson1 person =
let name, age = person
printfn "name = %s, age = %d" name age
// instead of deconstructing the tuple using 'let',
// we can do it in the declaration of parameters
let writePerson2 (name, age) =
printfn "name = %s, age = %d" name age
// in both cases, the call is the same
writePerson1 ("Joe", 20)
writePerson2 ("Joe", 20)
Sie können die Funktion fst verwenden das erste Element zu bekommen, und snd die zweite ekement zu erhalten. Sie können auch Ihre eigene ‚dritte‘ Funktion schreiben:
let third (_, _, c) = c
Lesen Sie mehr hier: F # Sprachreferenz, Tupeln
Sie können auch eine auspacken Funktion für eine bestimmte Länge schreiben:
let unpack4 tup4 ind =
match ind, tup4 with
| 0, (a,_,_,_) -> a
| 1, (_,b,_,_) -> b
| 2, (_,_,c,_) -> c
| 3, (_,_,_,d) -> d
| _, _ -> failwith (sprintf "Trying to access item %i of tuple with 4 entries." ind)
oder
let unpack4 tup4 ind =
let (a, b, c, d) = tup4
match ind with
| 0 -> a
| 1 -> b
| 2 -> c
| 3 -> d
| _ -> failwith (sprintf "Trying to access item %i of tuple with 4 entries." ind)