scala – 元组从列表中重复删除
发布时间:2020-12-16 09:06:58 所属栏目:安全 来源:网络整理
导读:考虑以下元组列表: val input= List((A,B),(C,(B,A)) 并且假设元素(A,B)和(B,A)是相同的并且因此是重复的,从上面的列表中消除重复的有效方式(优选地在Scala中)是什么.这意味着所需的输出是另一个列表: val deduplicated= List((A,B)) 提前致谢! p.s:这不
考虑以下元组列表:
val input= List((A,B),(C,(B,A)) 并且假设元素(A,B)和(B,A)是相同的并且因此是重复的,从上面的列表中消除重复的有效方式(优选地在Scala中)是什么.这意味着所需的输出是另一个列表: val deduplicated= List((A,B)) 提前致谢! p.s:这不是家庭作业;) 更新: 谢谢大家! “集合”解决方案似乎是最好的解决方案. 解决方法
您可以使用set来尝试它,但是您需要声明自己的元组类以使其工作.
case class MyTuple[A](t: (A,A)) { override def hashCode = t._1.hashCode + t._2.hashCode override def equals(other: Any) = other match { case MyTuple((a,b)) => a.equals(t._1) && b.equals(t._2) || a.equals(t._2) && b.equals(t._1) case _ => false } } val input= List(("A","B"),("C",("B","A")) val output = input.map(MyTuple.apply).toSet.toList.map((mt: MyTuple[String]) => mt.t) println(output) 编辑: implicit class extList[T](list: List[T]) { def distinctBy[U](f: T => U): List[T] = { var set = Set.empty[U] var result = List.empty[T] for(t <- list) { val u = f(t) if(!set(u)) { result ::= t set += u } } result.reverse } } println(input.distinctBy { case (a,b) => Set((a,b),(b,a)) }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |