1

我有以下列表(只是一个例子 - 列表可以是任意深度);

val foo = List(1, List(2, List(3, 4)), List(5, List(6, List(7, List(8,9,10)))))

我想遍历列表,并用谓词中的某个值“替换”和元素。大意是什么

map(case 4 => 42 case x => x)

我希望它产生一个如下所示的新列表;

List(1, List(2, List(3, 42)), List(5, List(6, List(7,List(8,9,10)))))

我正在尝试通过下面的递归函数来做到这一点;

def copyListReplace(tree: List[Any], p: Any => Any): List[Any] = {
  tree.map(x =>
    x match {
      case y: List[Any] => copyList(y.tail, p)
      case t => p(t)
    }
  )
}

但我没有得到想要的结果;

scala>println(copyListReplace(foo, (x => x match{ case 4 => 42 case _ => t})))    
List(1, List(List(42)), List(List(7)))

在此先感谢您的帮助!

4

1 回答 1

0

您必须y.tail从递归函数中删除并使用y(映射整个嵌套列表 - 不要跳过第一个元素)。

def copyListReplace(tree: List[Any], p: Any => Any): List[Any] = {
  tree.map(x =>
    x match {
      case y: List[Any] => copyListReplace(y, p)
      case t => p(t)
    }
  )
}
于 2013-04-11T15:08:49.903 回答