我有一个字符串数组。每个字符串有2个部分,并用空格分隔。看起来像:
x <white space> y
我想把它变成一个元组数组,每个元组都有(x,y)
我怎样才能在scala中写这个?我知道它需要类似的东西:
val results = listOfStrings.collect { str => (str.left, str.right) }
我不确定如何将每个str分解为左右两侧......
答案 0 :(得分:6)
您可以利用Scala中的正则表达式也是“extractors”这一事实。
scala> var PairWithSpaces = "(\\w+)\\s+(\\w+)".r
PairWithSpaces: scala.util.matching.Regex = (.+)\s+(.+)
scala> val PairWithSpaces(l, r) = "1 17"
l: String = 1
r: String = 17
现在,您可以将提取器构建为自然的“地图”:
scala> Array("a b", "1 3", "Z x").map{case PairWithSpaces(x,y) => (x, y) }
res10: Array[(String, String)] = Array((a,b), (1,3), (Z,x))
对你来说可能有点过头了,但如果你的正则表达式变得有趣,它真的可以帮助你理解。我也喜欢如果给出非法字符串,这种方法会如何快速失败。
警告,不确定正则表达式是否与您需要的完全匹配...
答案 1 :(得分:3)
你可以(假设你想在没有投诉的情况下放弃任何不符合模式的字符串):
val results = listOfStrings.map(_.split("\\s+")).collect { case Array(l,r) => (l,r) }