如何将具有已知格式的字符串列表映射到元组列表?

aaa*_*aab 1 string functional-programming scala

我有一个字符串数组.每个字符串有2个部分,并用空格分隔.好像:

 x <white space> y
Run Code Online (Sandbox Code Playgroud)

我想把它变成一个元组数组,每个元组都有(x,y)

我怎么能在scala中写这个?我知道它需要类似的东西:

val results = listOfStrings.collect { str => (str.left, str.right) }
Run Code Online (Sandbox Code Playgroud)

不知道我怎么能把每个str分解到需要的左右两侧......

Ada*_*ung 6

您可以利用Scala中的正则表达式也是" 提取器 " 这一事实.

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
Run Code Online (Sandbox Code Playgroud)

现在,您可以将提取器构建为自然的"地图":

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))
Run Code Online (Sandbox Code Playgroud)

对你而言可能有点过头了,但如果你的正则表达式变得有趣,它可以真正提高可读性.我也喜欢如果给出非法字符串,这种方法会如何快速失败.

警告,不确定正则表达式是否与您需要的完全匹配...