任务很简单,但是想法很简单。
我有3个列表和一个字符串。
val a = List("x", "y", "z")
val b = List("a1", "a2", "b1", "b2", "c1", "c2", "d1", "d2")
val c = List("1", "1", "2", "2", "3", "3", "4", "4")
val d = "xc1b1"
我需要检查d
是否包含来自a
的元素。如果可以,我将检查b
中存在的d
中所有元素的位置,并从c
返回一组与这些位置相关的元素。
给定示例的结果是
Set("3", "2")
但是当我尝试
if(a.exists(d.contains)) c(b.indexWhere(d.contains))
我只能得到
Any = 2
哪个核心响应b
即b1
的第一个遇到的元素
我将如何获得套装?
答案 0 :(得分:2)
-
if(a.exists(d.contains)) b.zip(c).collect{
case (x, y) if d.contains(x) => y
}
// res1: Any = List(2, 3)
如果您需要一套:
if(a.exists(d.contains)) b.zip(c).collect{
case (x, y) if d.contains(x) => y
}.toSet
// res2: Any = Set(2, 3)
答案 1 :(得分:1)
我想我已经理解了您在这里需要做的事情,尽管这个问题可以通过一些澄清来解决。
这些是我找到的设置的两种方法:
if(a.exists(d.contains)) b.collect {
case x if d.contains(x) => c(b.indexOf(x))
}.toSet
if(a.exists(d.contains)) b.filter(d.contains).map(b.indexOf).map(c).toSet
都找到d中b的元素,然后在b中找到它们的索引,在c中找到它们的相对元素。第一种方法在做事时更明确,而第二种方法则更简洁。