2015-10-07 2 views
1

Я пытаюсь выяснить, как с помощью оператора map я могу создать кортеж с различным количеством полей из существующих.Scala - Создайте кортеж от другого

А именно, если у меня есть кортеж в виде (String, Int1, Int2) Я хочу создать кортеж с 2 полями в виде (String, Int1 + Int2), где первое поле будет таким же, как в исходном наборе, а второе поле будет добавление 2-го и 3-го полей исходного кортежа.

ответ

5

используя поиск по шаблону:

tuple match { case (a, b, c) => (a, b + c) } 

map не является членом кортежа. в случае, если кортеж является типом элемента в коллекции, его можно использовать.

collection map { case (a, b, c) => (a, b + c) } 
1

Я предлагаю использовать ответ Shyamendra Solanki, однако для полноты картины я хотел бы отметить, что Shapeless предоставляет карту и flatMap методы tuples

1

Для одного кортежа типа (String,Int,Int), в дополнение к добыче значения с совпадением рисунков, как указано @Shyamendra Solanki, примечание методы _1, _2 и _3; следовательно,

def create(t : (String,Int,Int)) = (t._1, t._2+t._3) 

также является допустимым подходом, хотя, возможно, и не столь удобочитаемым.

Для данной коллекции кортежей, рассмотрим также для постижений где

def create(xs : Seq[(String,Int,Int)]) = for ((s,i1,i2) <- xs) yield (s, i1+i2) 

передает нужную семантику.

Смежные вопросы