在Scala中替换字符串变量以获得解决方案

时间:2016-04-18 17:28:46

标签: scala

我有一个具有以下数据结构的变量,我想用String部分的所有“goo”替换所有“foo”。有没有一行整齐的代码可以做到这一点?想看看是否有任何智能解决方案可以跳过编写循环。 :)

var result = List[List[(List[String], Double)]]

的问候, 林

2 个答案:

答案 0 :(得分:4)

我不确定我是否做得对,但也许这就是你要找的东西?

scala> val a: List[List[(List[String], Double)]] = List(List((List("foo asd", "asd foo"), 2.6)))
scala> a map (_ map { case (k, v) => (k map (_.replaceAll("foo", "goo")), v) })
res1: List[List[(List[String], Double)]] = List(List((List(goo asd, asd goo),2.6)))

修改

回答评论让我先删除空格并使用点

scala> a.map(_.map { case (k, v) => (k.map(_.replaceAll("foo", "goo")), v) })

现在,将_.method(param)展开到x => x.method(param)

scala> a.map(b => b.map { case (k, v) => (k.map(c => c.replaceAll("foo", "goo")), v) })

你有3个级别的嵌套列表,其中一个在元组内部,它不会很漂亮,你需要映射每个嵌套列表并从元组中提取最后一个。

答案 1 :(得分:1)

scala> val l = List(List((List("foo","afoo"),3.4),(List("gfoo","cfoo"),5.6)))
l: List[List[(List[String], Double)]] = List(List((List(foo, afoo),3.4), (List(gfoo, cfoo),5.6)))

scala> def replaceFoo(y:List[String]) = y.map(s => s.replace("foo","goo"))
replaceFoo: (y: List[String])List[String]

scala> l.map(x => x.map(y => (replaceFoo(y._1),y._2)))
res0: List[List[(List[String], Double)]] = List(List((List(goo, agoo),3.4), (List(ggoo, cgoo),5.6)))