给出以下地图(“ DIAMOND”->“ DAYMAHND”,“ THOUSAND”->“ THAWZAHND”),我想获取当前地图中每个项目的值,并使用最后一个元音和其后的每个其他字作为值,并且与键相同。我将如何在Scala中做到这一点?我听说有人通过使用.stripSuffix()完成此操作。 (地图是一成不变的)
输入:Map(“ DIAMOND”->“ DAYMAHND”,“ THOUSAND”->“ THAWZAHND”)
输出:Map(“ DIAMOND”->“ AHND”,“ THOUSAND”->“ AHND”)
我的尝试:
val table1 = Map("DIAMOND" -> "DAYMAHND", "THOUSAND" -> "THAWZAHND")
val table2 = table1.map { case (key, value) =>
val string_2 = value
.reverse
.takeWhile("AEIOU".indexOf(_) ==
-1)
(key, string_2 + value.charAt(value.length
- 1 - string_2.length))
}
.toMap
答案 0 :(得分:2)
table1.mapValues(w => w.drop(w.lastIndexWhere("AEIOU".contains(_))))
答案 1 :(得分:0)
正则表达式可能是最好的方法。这是最简单的方法
table1.mapValues(_.split("(?=[AEIUO])").last)
不过,mapValues
每次阅读地图都会重新计算此表达式,因此,如果您要多次使用地图,请执行以下操作:
table1.map{case (k, v) => k -> v.split("(?=[AEIUO])").last}