2015-02-05 14 views
7

In elisir, possiamo concatenare, liste come modotuple Concatena in elisir

ex(52)> [1,2,3,4] ++ [5,6,7] 
[1, 2, 3, 4, 5, 6, 7] 

Possiamo anche concatenare tuple? Qualcosa come questo?

iex(53)> {1,2,3,4} ++ {5,6,7} 
** (ArgumentError) argument error 
    :erlang.++({1, 2, 3, 4}, {5, 6, 7}) 

L'unica altra cosa che posso pensare è quello di convertire una tupla per elencare, quindi riconvertire tupla utilizzando i to_list e to_tuple funzioni. Ma è troppo goffo.

risposta

21

Non è possibile concatenare le tuple.

L'unica ragione è che non si suppone che li si usi come tali. La maggior parte dell'uso di tuple richiede la conoscenza delle loro dimensioni e le cose diventano più sfocate se è possibile concatenarle. Inoltre, concatenando le tuple è necessario copiare entrambe le tuple in memoria, il che non è efficiente.

In altre parole, se si desidera concatenare le tuple, è possibile che la struttura dei dati sia errata. Sono disponibili due opzioni:

  1. Usare gli elenchi
  2. comporre la tuple: invece di a ++ b, basta scrivere {a, b}
+0

grazie, che ha un senso! – User314159

+0

Se ho una situazione in cui ho 2 tuple e voglio unirle insieme, come dovrei fare per farlo? Dovrei convertire le tuple in una lista, quindi concatenare e quindi riconvertirle in una tupla? – CMCDragonkai

+4

Mi piace quando i designer di lingue rispondono alle domande. Non posso ottenere più ufficiale di quello. – Dty