比较列表的嵌套列表和列表

时间:2019-05-29 07:52:20

标签: scala

我正在尝试将列表值列表与另一个列表进行比较,如果匹配则返回。我在scala中查找它,但是我是scala的新手,如果有任何建议请继续传递,很难做到

val l1 = List(List(1,12.34,76.456,12,List(1,2,3)),List(2,12.43,76.256,12,List(11,12,13)))

val l2 = List(1,2,3,12)

因此,此处尝试将l1([1,2,3])l2 [1,2,3,12]l1 [11,12,13]l2 [1,2,3,12]进行比较,如果不匹配从l1到l2的任何元素,则返回。

在这里,我们寻找l1中任何与l2匹配的值,然后为0,否则为1

棘手的,但是在scala中可行吗?有什么建议

2 个答案:

答案 0 :(得分:0)

根据您提供的初始要求,以下解决方案将解决您的问题

val l1 = List(List(1,12.34,76.456,12,List(1,2,3)),List(2,12.43,76.256,12,List(11,12,13)))

val l2 = List(11,12,13)


l1.flatten.filter(_.isInstanceOf[List[Int]]).map(x =>
  if(x == l2) 0 else 1)

这给您一个结果,无论列表l2是否与l1的内部列表匹配。

res1: List[Int] = List(1, 0)

答案 1 :(得分:0)

您需要展平l1。使其通用(因为据我所知,l1可以是列表列表的列表..),您可以创建将其展平的通用方法:

def flatten[T](l: List[T]): List[T] = l match {
  case Nil => Nil
  case (x: List[T]) :: tail => flatten(x) ::: flatten(tail)
  case x :: tail => x :: flatten(tail)
}

然后,您可以通过以下方法获得结果:

(l2.map(flatten(l1).contains)).map(_.compare(false)) // List(1,1,1,1)

这是要运行和调试的代码-https://scalafiddle.io/sf/3SStZZX/1