如何使用元组列表定义 case class 并访问 scala 中的元组

How to define case class with a list of tuples and access the tuples in scala

我有一个案例 class,其参数 a 是一个 int 元组列表。我想遍历 a 并定义 a 上的操作。

我试过以下方法:

case class XType (a: List[(Int, Int)]) {
 for (x <- a) {
  assert(x._2 >= 0)
 }
 def op(): XType = {
  for ( x <- XType(a))
    yield (x._1, x._2)
  }
}

但是,我收到错误消息:

"Value map is not a member of XType."

如何访问元组的整数并定义对它们的操作?

您 运行 遇到了 for 理解的问题,这实际上是表达 foreachmap(以及 flatMapwithFilter/filter)。有关更多说明,请参阅 here and here

你的第一个 for 理解(带断言的)等同于

a.foreach(x => assert(x._2 >= 0))

a是一个Listx是一个(Int, Int),一切都很好。

但是,第二个(在 op 中)转换为

XType(a).map(x => x)

这没有意义--XType 不知道如何处理 map,就像错误所说的那样。

XType 的实例将其 a 简单地称为 a(或 this.a),因此 a.map(x => x)op(然后将结果变成新的XType)。

作为一般规则,for 理解对于嵌套的 maps(或 flatMaps 或其他)很方便,而不是 [=12 的 1-1 等价物=] 在其他语言中循环——只需使用 map 即可。

您可以通过以下方式访问元组列表:

def op(): XType = {
  XType(a.map(...))
}