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

时间:2018-06-28 13:23:23

标签: scala list

任务很简单,但是想法很简单。

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

哪个核心响应bb1的第一个遇到的元素

我将如何获得套装?

2 个答案:

答案 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中找到它们的相对元素。第一种方法在做事时更明确,而第二种方法则更简洁。