2013-05-27 21 views
16

Czy istnieje prosty sposób wyodrębnienia wartości z listy do krotki w Scali?Wyodrębnij wartości z tablicy do Tuple

Zasadniczo coś

"15,8".split(",").map(_.toInt).mkTuple //(15, 8) 

lub jakiś inny sposób mogę zrobić

val (x, y) = "15,8".split(",").map(_.toInt) 

Odpowiedz

34

Jeśli masz je w tablicy MOŻESZ napisz Array przed nazwami zmiennych jak:

val Array(x, y) = "15,8".split(",").map(_.toInt) 

Po prostu zamień na Seq lub podobną, jeśli masz inny typ kolekcji.

W zasadzie działa tak jak za kulisami extractor. Zobacz także powiązany wątek: scala zip list to tuple

+0

Czy istnieje sposób na stworzenie wyniku 'krotki' bezpośrednio, bez tworzenia dwóch vals' x' i 'y'? (Naprawdę lubię rozwiązania inline) – icl7126

6

można spróbować dopasowywania wzoru:

val (x, y) = "15,8".split(",") match { 
    case Array(x: String, y: String) => (x.toInt, y.toInt) 
    case _ => (0, 0) // default 
} 
+0

Naprawdę miałem nadzieję na coś nieco mniej gadatliwego, prostsze jest robienie tego w taki sposób, w jaki aktualnie to robię, czyli var s = l.split (","). (_.toInt) val (x, n) = (s (0), s (1)) Po prostu miałem nadzieję pozbyć się kroku pośredniego z 's' – UberMouse

+0

Dzięki dopasowaniu do wzoru możesz łatwo zwrócić awarię wartość, jeśli nie otrzymasz dwóch ciągów z podziału i nie wprowadza niepotrzebnych zmiennych. – rocky3000

+1

Tylko dla zapisu: część 'case _ => (0, 0)' naprawdę sugeruje coś, o co pierwotny pytający nie pytał w ogóle. –

Powiązane problemy