Scala 从另一个列表中获取包含某个值的元素和相应元素的索引

Scala 从另一个列表中获取包含某个值的元素和相应元素的索引,scala,list,Scala,List,queston是一个很好的例子,但是想法很简单 我有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返回一组与这些位置相关的

queston是一个很好的例子,但是想法很简单

我有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
ie
b1

我怎样才能拿到这套电视机?

-

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)
-

如果您需要一套:

if(a.exists(d.contains)) b.zip(c).collect{ 
    case (x, y) if d.contains(x) => y 
}.toSet
// res2: Any = Set(2, 3)

我想我已经理解了你在这里需要做什么,尽管这个问题需要一些澄清

我发现有两种方法可以到达你的电视机:

如果(a.exists(d.contains))b.collect{
如果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中找到它们的相对元素。第一种方式更明确,而第二种方式更简洁。

我想我已经理解了您需要在这里做什么,尽管这个问题需要一些澄清

我发现有两种方法可以到达你的电视机:

如果(a.exists(d.contains))b.collect{
如果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中找到它们的相对元素。第一种方式更明确,而第二种方式更简洁