我有这个scala program无法编译,为什么会这样?我正在尝试打印列表/子列表中的所有数字而不使用flatMap:
object HelloWorld extends App {
def test() = {
val numbs = List ((1,1,1),(2,2,2),(3,3,3))
val a = for {
i <- numbs
j <- i
} yield j
println(a)
}
test()
}
这是错误:
HelloWorld.scala:7: error: value map is not a member of (Int, Int, Int)
j <- i
^
one error found
应打印List (1,1,1,2,2,2,3,3,3)
答案 0 :(得分:0)
您不能使用常用方法迭代元组。元组用来表示不同事物的组合,迭代它们通常没用。如果你真的需要,可以通过索引来实现:
val a = for {
i <- numbs
j <- 0 until i.productArity
} yield i.productElement(j)
但是,如果您正在做一些非常通用的事情,例如格式化文本输出的元组,这似乎真的很有用。否则,您应该将数据保存为列表列表。
答案 1 :(得分:0)
没有为元组定义的地图。您需要从元组3创建一个List。这是你可以做到的一种方式:
def test() = {
val numbs = List((1, 1, 1), (2, 2, 2), (3, 3, 3))
val a = for {
i <- numbs
j <- List(i._1, i._2, i._3)
} yield j
println(a)
}
test() // prints List(1, 1, 1, 2, 2, 2, 3, 3, 3)
答案 2 :(得分:0)
就像在其他答案中所说的那样,没有为元组定义的地图。如果您不需要使用List[Tuples]
,则解决方案是将变量numbs
用作:
val numbs = List(List(1,1,1), List(2,2,2), List(3,3,3)))
您的代码将按预期工作。
答案 3 :(得分:0)
如果你坚持使用元组,你也可以像这样使用productIterator:
object HelloWorld extends App {
def test() = {
val numbs = List((1, 1, 1), (2, 2, 2), (3, 3, 3))
val a = for {
i <- numbs
j <- i.productIterator
} yield j
println(a)
}
test()
}
但也许最好考虑列表列表。