我正在尝试使用
Scala查找两个字符串的交集.我对Scala很新,但我觉得这应该是一个单行.我尝试过使用map和foldLeft,但还没有得到正确的答案.
给定两个字符串,返回按顺序相同的字符列表.例如,“abcd”,“acc”应返回“a”,“abc”应返回“abc”.
这是我到目前为止尝试过的两个函数
(str1 zip str2).map{ case(a,b) => if (a == b) a else ""}
和
(str1 zip str2).foldLeft(""){case(acc,n) => if (n._1 == n._2) acc+n._1.toString else ""}
我想做的是这样的事情
(str1 zip str2).map{ case(a,b) => if (a == b) a else break}
但这不起作用.
我知道我可以用多行和一个for循环来做到这一点,但这感觉就像一个单行.有人可以帮忙吗?
谢谢
解决方法
(str1 zip str2).takeWhile( pair => pair._1 == pair._2).map( _._1).mkString
在scala REPL中测试它:
scala> val str1 = "abcd" str1: String = abcd scala> val str2 = "abc" str2: String = abc scala> (str1 zip str2).takeWhile( pair => pair._1 == pair._2).map( _._1).mkString res26: String = abc
编辑通过两个测试用例
scala> (str1 zip "acc").takeWhile( pair => pair._1 == pair._2).map( _._1).mkString res27: String = a