Pergunta

Em F # código que tenho uma tupla:

let myWife=("Tijana",32)

Eu quero acessar cada membro da tupla separadamente. Por exemplo este que eu quero alcançar, eu não posso

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

Este código não faz, obviamente, trabalho, por que eu acho que você pode reunir o que eu quero alcançar.

Foi útil?

Solução

Você quer evitar sua esposa do envelhecimento, fazendo sua idade imutável? :)

Para uma tupla que contém apenas dois membros, pode fst e snd para extrair os membros do par.

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

Para tuplas mais longos, você tem que descompactar o tuple em outras variáveis. Por exemplo,

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

Outras dicas

Outra coisa bastante útil é que a correspondência de padrão (assim como ao extrair elementos usando "deixar" de ligação) pode ser usado em outras situações, por exemplo quando se escreve uma função:

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)

Você pode usar a função FST para obter o primeiro elemento, e snd para obter o segundo ekement. Você também pode escrever sua própria função 'terceiro':

let third (_, _, c) = c

Leia mais aqui: F # Language, Tuples

Você também pode escrever uma função de descompactação durante um determinado período:

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) 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top