Scala 部分字符串匹配
scala partial string match
我有一个关于字符串列表与字符串列表的部分匹配(我猜是相交)的问题。
List1:List = [a,b,c,d,e,f]
List2:Iterable[String] = [a b,e f,g h,x y]
我想将List1中恰好也存在于List2中的任意元素或元素组合替换为List2中的元素,例如[a,b]在List1中,List 2包含元素[a b],在这种情况下,List1 中的 [a,b] 将被替换为 [a b]。列表 1 的结果应为:
List1result = [a b,c,d,e f]
我试过相交,这会 return [a b, e f]
好的,我在下面的评论后编辑了我的答案,我想我现在明白了这个问题。
取出第二个列表的每个元素,将其转换为元素列表并使用containsSlice
过滤出值。
如果切片中的所有元素都存在于第一个列表中,containsSlice
将 return 为真。
val lst1 = List("a","b","c","d","e","f")
val lst2 = List("a b","e f","g h","x y")
lst2.filter{ pair =>
val xss = pair.split(" ")
lst1.containsSlice(xss)
}
您可以尝试这样的操作:
val l1 = List("a", "b", "c", "d", "e", "f")
val l2 = List("a b", "e f", "g h", "x y")
l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))
l2.foldLeft(List[String]()) { case (x, y) => if (l1.containsSlice(y.split(" "))) x :+ y else x} ++
l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))
l1: List[String] = List(a, b, c, d, e, f)
l2: List[String] = List(a b, e f, g h, x y)
res0: List[String] = List(a b, e f, c, d)
我有一个关于字符串列表与字符串列表的部分匹配(我猜是相交)的问题。
List1:List = [a,b,c,d,e,f]
List2:Iterable[String] = [a b,e f,g h,x y]
我想将List1中恰好也存在于List2中的任意元素或元素组合替换为List2中的元素,例如[a,b]在List1中,List 2包含元素[a b],在这种情况下,List1 中的 [a,b] 将被替换为 [a b]。列表 1 的结果应为:
List1result = [a b,c,d,e f]
我试过相交,这会 return [a b, e f]
好的,我在下面的评论后编辑了我的答案,我想我现在明白了这个问题。
取出第二个列表的每个元素,将其转换为元素列表并使用containsSlice
过滤出值。
containsSlice
将 return 为真。
val lst1 = List("a","b","c","d","e","f")
val lst2 = List("a b","e f","g h","x y")
lst2.filter{ pair =>
val xss = pair.split(" ")
lst1.containsSlice(xss)
}
您可以尝试这样的操作:
val l1 = List("a", "b", "c", "d", "e", "f")
val l2 = List("a b", "e f", "g h", "x y")
l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))
l2.foldLeft(List[String]()) { case (x, y) => if (l1.containsSlice(y.split(" "))) x :+ y else x} ++
l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))
l1: List[String] = List(a, b, c, d, e, f)
l2: List[String] = List(a b, e f, g h, x y)
res0: List[String] = List(a b, e f, c, d)