我有以下列表(只是一个例子 - 列表可以是任意深度);
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,看起来如下;
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)))
提前感谢您的帮助!
答案 0 :(得分: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)
}
)
}