Scala - Ошибка вывода типа List.map

Ошибка компиляции этого кода

val kk2: List[(Int, Double)] = (1, 0.5) :: (2, 0.6)
kk2.map((n1, d1) => n1) // compile error

я хочу список [Int, Double] => список [Int], как я могу решить эту ошибку?

1 ответ

Две вещи.

Во-первых, чтобы построить List[(Int, Double)] используя оператор против ::, вам нужно добавить элемент такого списка (например, в вашем случае (1, 0.5)) к уже существующему списку, а не к другому элементу. Другими словами, на правой стороне :: должен быть список кортежей, а не только один кортеж, поэтому оберните (2, 0.6) кортеж в List, Быть осторожен: List(2, 0.6) даст вам список из двух элементов, 2 и 0,6, но вы хотите список из одного элемента кортежа, поэтому вам нужно две пары скобок: List((2, 0.6)), Как правильно указано в комментарии, вы также можете сделать это более чистым способом, так как (1, 0.5) :: (2, 0.6) :: Nil, который является рекурсивным способом определения списка с использованием только оператора cons (Nil - пустой список).

Во-вторых, когда вы отображаете кортеж, вы должны использовать частичную функцию для механизма сопоставления с образцом, или, проще говоря, вам нужно case,

Так:

val kk2: List[(Int, Double)] = (1, 0.5) :: (2, 0.6) :: Nil
kk2.map { case (n1, d1) => n1 } // List(1,2)
Другие вопросы по тегам