2016-04-04 3 views
3

У меня есть образец List, как показано нижеПеребор список кортежей в Scala

List[(String, Object)] 

Как перебрать этот список можно с помощью for?

Я хочу сделать что-то вроде

for(str <- strlist) 

но для 2d списка выше. Что будет заполнитель для str?

+1

Вы можете цикл по струнам в 'List [(String, Object)]' с 'для (ул <- список .map (_._ 1)) 'или' for ((str, _) <- list) '. –

+0

Это не список «2d». Это одномерный список, каждый из которых является парой. Так что же означает «петля»? Получать каждую пару по очереди или что-то еще? –

ответ

1

Я предлагаю использовать карту, фильтр, сгиб или foreach (независимо от ваших потребностей), а не итерации по коллекции с использованием цикла.

Edit 1: например , если вы хотите применить некоторые Func Foo (кортеж) на каждом элементе

val newList=oldList.map(tuple=>foo(tuple)) 
val tupleStrings=tupleList.map(tuple=>tuple._1) //in your situation 

, если вы хотите, чтобы фильтр в соответствии с некоторым логическое условие

val newList=oldList.filter(tuple=>someCondition(tuple)) 

или просто если вы хотите распечатать свой список

oldList.foreach(tuple=>println(tuple)) //assuming tuple is printable 

y ожно найти пример и аналогичные функции здесь
https://twitter.github.io/scala_school/collections.html

+0

хорошее предложение, но вы могли бы оставить пример и получить голос. –

+1

добавил несколько примеров – xrs

+0

Спасибо, что карта была тем, что я искал. –

1

Если вы просто хотите, чтобы получить строки вы можете отображающие над списком кортежей, как это:

// Just some example object 
case class MyObj(i: Int = 0) 

// Create a list of tuples like you have 
val tuples = Seq(("a", new MyObj), ("b", new MyObj), ("c", new MyObj)) 

// Get the strings from the tuples 
val strings = tuples.map(_._1) 

// Output: Seq[String] = List(a, b, c) 

Примечание: Члены кортежей доступны с помощью подчеркивания обозначения (которые индексируется от 1, не 0)

1

С for вы можете извлечь элементы кортежа,

for ((s,o) <- list) yield f(s,o) 
0

Здесь,

scala> val fruits: List[(Int, String)] = List((1, "apple"), (2, "orange")) 
fruits: List[(Int, String)] = List((1,apple), (2,orange)) 

scala> 

scala> fruits.foreach { 
    | case (id, name) => { 
    |  println(s"$id is $name") 
    | } 
    | } 

1 is apple 
2 is orange 

Примечание: ожидаемый тип требует функция с одним аргументом, принимающая 2-кортеж. Рассмотрим схему согласования анонимную функцию, { case (id, name) => ... }

Легко скопировать код:

val fruits: List[(Int, String)] = List((1, "apple"), (2, "orange")) 

fruits.foreach { 
    case (id, name) => { 
    println(s"$id is $name") 
    } 
} 
Смежные вопросы