【问题标题】:How to define case class with a list of tuples and access the tuples in scala如何使用元组列表定义案例类并访问scala中的元组
【发布时间】:2018-04-20 10:32:35
【问题描述】:

我有一个带有参数 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)
  }
}

但是,我得到了错误:

“值映射不是 XType 的成员。”

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

【问题讨论】:

    标签: scala case-class


    【解决方案1】:

    您遇到了for 理解的问题,这实际上是表达foreachmap(以及flatMapfilter)之类的另一种方式。有关更多说明,请参阅 herehere

    你的第一个 for 理解(带有断言的那个)相当于

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

    aListx(Int, Int),一切都很好。

    但是,第二个 on (in op) 转换为

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

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

    XType 的实例将其a 简单地称为a(或this.a),因此a.map(x =&gt; x)op 中就可以了(然后将结果转换为新的@987654345 @)。

    作为一般规则,for 理解对于嵌套的 maps(或 flatMaps 或其他)很方便,而不是作为其他语言中 for 循环的 1-1 等效项——只需使用map 代替。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-08
        • 2021-11-06
        相关资源
        最近更新 更多