我有以下 list
val a = List(("name1","add1","city1",10),("name1","add1","city1",10),
("name2","add2","city2",10),("name2","add2","city2",20),("name3","add3","city3",20))
我想要基于元组的前三个值从上面的列表中获取不同的元素。从列表中查找不同元素时不应考虑第四个值。
我想要以下输出:
val output = List(("name1","add1","city1",10),("name2","add2","city2",10),
("name3","add3","city3",20))
是否有可能获得以上输出?
据我所知,
distinct
如果整个元组/值重复,则有效。我试过 distinct
喜欢以下 :val b = List(("name1","add1","city1",10),("name1","add1","city1",10),("name2","add2","city2",10),
("name2","add2","city2",20),("name3","add3","city3",20)).distinct
但它给出的输出为 -
List(("name1","add1","city1",10),("name2","add2","city2",10),
("name2","add2","city2",20),("name3","add3","city3",20))
任何替代方法也将不胜感激。
最佳答案
使用 groupBy
像这样
a.groupBy( v => (v._1,v._2,v._3)).keys.toList
这构造了一个
Map
其中每个键根据定义是上面 lambda 函数中要求的唯一三元组。如果它还包含元组中的最后一个元素,则为每个键获取第一个元素,如下所示
a.groupBy( v => (v._1,v._2,v._3)).mapValues(_.head)
关于scala - 如何使用scala基于某些元素从元组列表中查找唯一元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33956577/