使用Scala按顺序查找两个字符串的交集

前端之家收集整理的这篇文章主要介绍了使用Scala按顺序查找两个字符串的交集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 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

猜你在找的Scala相关文章