循环遍历Scala中的元组列表

时间:2016-04-04 02:51:56

标签: scala

我有一个示例#include <sstream>,如下所示

List

如何使用List[(String, Object)] 循环显示此列表?

我想做点什么

for

但是对于上面的2d列表。 for(str <- strlist) 的占位符是什么?

4 个答案:

答案 0 :(得分:5)

在这里,

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")
  }
}

答案 1 :(得分:2)

使用for,您可以提取元组的元素

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

答案 2 :(得分: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)

答案 3 :(得分:1)

我建议使用map,filter,fold或foreach(适合您的需要),而不是使用循环遍历集合。

编辑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

您可以在此处找到示例和类似功能的https://twitter.github.io/scala_school/collections.html