2014-11-17 37 views
1

大家好,我斯卡拉列表包含以下元素斯卡拉列表中找到不同的元素

val myList = List(List("A","B","C","E"),List("A","A1","B1","C","E"),List("P","E","L","A")) 

现在我想找出以上列表中不同的元素,因此我最后的名单将

val finalList = List ("A","E") 

如何这发现在斯卡拉?所有内部列表之间

+3

我不认为这是“不同的元素”。你的意思是出现在每个列表中的元素。 –

+1

@Paul你对我想在每个列表中找到公共元素,但是由于错别字错误它插入了不同 – Yogesh

回答

10

寻找交集:

myList.reduceLeft(_.intersect(_)) // List[String] = List(A, E) 
+0

它工作正常,但是,你能解释一些这个reduceLeft如何解决我的问题或者我可以使用reduceRight吗? – Yogesh

+0

@yogesh对于你的问题,'reduceLeft'和'reduceRight'没有区别。第一次迭代,您会发现列表的第1个和第2个元素之间的交集。下一次迭代你会发现前一个结果和下一个元素的交集。等等等等。 –

+1

reduceLeft(或reduceRight)将类型为A => A => A的二元函数应用于底层的Traversable,从第一个元素开始。例如。 List(1,2,3,4).reduceLeft(_ + _)== List(1 + 2,3,4).reduceLeft(...)== List(1 + 2 + 3,4).reduceLeft (...)==列表(1 + 2 + 3 + 4)。 ReduceRight恰恰相反。 – ponythewhite