Question

En code F #, j'ai un tuple:

let myWife=("Tijana",32)

Je souhaite accéder à chaque membre du tuple séparément. Par exemple, ce que je veux réaliser par je ne peux pas

Console.WriteLine("My wife is {0} and her age is {1}",myWife[0],myWife[1])

Ce code ne fonctionne évidemment pas, je pense que vous pouvez rassembler ce que je veux réaliser.

Était-ce utile?

La solution

Vous voulez empêcher votre femme de vieillir en la rendant immuable? :)

Pour un tuple ne contenant que deux membres, vous pouvez fst et snd pour extraire les membres de la paire.

let wifeName = fst myWife;
let wifeAge = snd myWife;

Pour les tuples plus longs, vous devrez décompresser le tuple dans d'autres variables. Par exemple,

let _, age = myWife;;
let name, age = myWife;;

Autres conseils

Une autre chose très utile est que le filtrage par motif (comme lors de l'extraction d'éléments en utilisant "let") est utilisable dans d'autres situations, par exemple lors de l'écriture d'une fonction:

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)

Vous pouvez utiliser la fonction fst pour obtenir le premier élément et snd pour obtenir le second ekement. Vous pouvez également écrire votre propre "troisième" fonction:

let third (_, _, c) = c

Lisez-en plus ici: Référence du langage F #, Tuples

Vous pouvez également écrire une fonction de décompression pour une certaine longueur:

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) 

ou

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) 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top