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.

War es hilfreich?

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) 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top