List 从字符串拆分中获取唯一的字符串
我想从输入中获取一个List 从字符串拆分中获取唯一的字符串,list,scala,List,Scala,我想从输入中获取一个列表[String]。请帮我找到一个优雅的方式 期望输出: emp1,emp2 我的代码: val ls = List("emp1.id1", "emp2.id2","emp2.id3","emp1.id4") def myMethod(ls: List[String]): Unit = { ls.foreach(i => print(i.split('.').head)) } (
列表[String]
。请帮我找到一个优雅的方式
期望输出:
emp1,emp2
我的代码:
val ls = List("emp1.id1", "emp2.id2","emp2.id3","emp1.id4")
def myMethod(ls: List[String]): Unit = {
ls.foreach(i => print(i.split('.').head))
}
(myMethod(ls)). //set operation to make it unique ??
如果您关心验证,可以考虑使用正则表达式:
val ls = List("emp1.id1", "emp2.id2","emp2.id3","emp1.id4","boom")
def myMethod(ls: List[String]) = {
val empIdRegex = "([\\w]+)\\.([\\w]+)".r
val employees = ls collect { case empIdRegex(emp, _) => emp }
employees.distinct
}
println(myMethod(ls))
产出:
List(emp1, emp2)
自Scala 2.13以来,您可以使用
List.unfold
执行以下操作:
List.unfold(ls) {
case Nil =>
None
case x :: xs =>
Some(x.takeWhile(_ != '.'), xs)
}.distinct
请不要使用不同的值,因此可以使用Set.unfold
:
Set.unfold(ls) {
case Nil =>
None
case x :: xs =>
Some(x.takeWhile(_ != '.'), xs)
}
代码在运行。这也适用。你看到的(split和head与takeWhile)ls.map(u.split('.').head)有什么不同或问题吗?我认为它更能表达逻辑,并且在碰到“.”时就会停止,而不是检查整个字符串。你在这里使用unique是什么意思?请详细说明你想要实现什么?谢谢。这也很棒,太好了。非常感谢你,兹维。
Set.unfold(ls) {
case Nil =>
None
case x :: xs =>
Some(x.takeWhile(_ != '.'), xs)
}