我正在尝试将列表值列表与另一个列表进行比较,如果匹配则返回。我在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中可行吗?有什么建议
答案 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