替换Scala中的字符串变量以获得解决方案
我有一个具有以下数据结构的变量,我想将替换Scala中的字符串变量以获得解决方案,scala,Scala,我有一个具有以下数据结构的变量,我想将字符串的所有“foo”替换为所有“goo”。有没有一行简洁的代码可以做到这一点?希望查看是否有任何智能解决方案可以跳过以编写循环。:) 问候,, 林我不确定我是否做对了,但也许这就是你要找的 scala> val a: List[List[(List[String], Double)]] = List(List((List("foo asd", "asd foo"), 2.6))) scala> a map (_ map { case (k, v
字符串的所有“foo”替换为所有“goo”。有没有一行简洁的代码可以做到这一点?希望查看是否有任何智能解决方案可以跳过以编写循环。:)
问候,,
林我不确定我是否做对了,但也许这就是你要找的
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) })
现在,将方法(param)
扩展到x=>x.method(param)
你有3层嵌套列表,其中一层在元组中,这并不漂亮,你需要映射每一层并从元组中提取最后一层。我不确定我是否正确,但也许这就是你要找的
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> 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)))
编辑
为了回答这个评论,让我先去掉空格,用点
scala> a.map(_.map { case (k, v) => (k.map(_.replaceAll("foo", "goo")), v) })
现在,将方法(param)
扩展到x=>x.method(param)
你有三层嵌套列表,其中一层在元组中,这并不漂亮,你需要映射每一层,并从元组中提取最后一层。谢谢你的ukasz,投票,以及在\ukasz
中的\uucode>是什么意思,在\umap
中向上投票以及什么是\ucode>的意思?请参阅我的编辑,这只是一个更详细的匿名函数的简写。谢谢Andrzej,在尝试之前始终向上投票。:)如果您能详细解释一下这一行的意思,我将不胜感激。l.map(x=>x.map(y=>(y._1.map(s=>s.replace(“foo”,“goo”)),y._2))
?对我来说还是有点进步。:)方法replaceFoo-将列表中的所有foo替换为goo。这个列表是元组的第一个元素(list[String],Double)。关于元组的第一个元素询问为_1,关于第二个_2,请耐心等待,将您的回答标记为答案。:)谢谢Andrzej,在尝试之前一定要投赞成票。:)如果您能详细解释一下这一行的意思,我将不胜感激。l.map(x=>x.map(y=>(y._1.map(s=>s.replace(“foo”,“goo”)),y._2))
?对我来说还是有点进步。:)方法replaceFoo-将列表中的所有foo替换为goo。这个列表是元组的第一个元素(list[String],Double)。关于元组的第一个元素询问为_1,关于第二个_2,请耐心等待,将您的回答标记为答案。:)
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)))