1

我正在 Scala REPL 中尝试以下代码,

val a = List(('a',4),('b',8))
val z = ('a',1)
a map (x => if (x._1 == z._1) (x._1, x._2 - z._2) else (z :: a))

我得到以下输出:List[Product] = List((a,3), List((a,1), (a,4), (b,8)))

为什么我得到输出List[Product]

我应该怎么做才能得到输出的结果类型List[(Char, Int)]而不是List[Product]

4

1 回答 1

3

您正在对列表中的每个元素应用一个函数"a"

在您进行的第一次迭代(a,4)中,在这种情况下,您正在应用一个对元组的第二个元素减 1 的函数。

结果是(a,3)

但是在第二个元素中,您将 cons 运算符用于“a”,因此此操作的结果是一个新的不可变列表。

('a',1) :: List(('a',4),('b',8)) === List((a,1), (a,4), (b,8))

IMO 你想要的结果是:

List(('a',3),('b',8))

可以这样实现:

a.map {
    case (z._1, x) => (z._1, x - z._2)
    case x => x
}
于 2013-05-05T20:44:51.440 回答