Accéder à un membre spécifique dans un tuple F #
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.
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)