我有一個案例類串列:
case class MyClass(id1: String, id2: String, nb: Int)
val myList = List(
MyClass("id1", "id2", 3),
MyClass("id3", "id4", 4),
MyClass("id2", "id1", 3), // <- Delete this one (dedup with MyClass("id1", "id2", 3))
MyClass("id4", "id2", 4), // <- Delete this one (dedup with MyClass("id2", "id4", 4))
MyClass("id5", "id6", 12)
)
myList.foldLeft(List[MyClass]()) {
(acc, elem) =>
if (myList.contains(MyClass(elem.id2, elem.id1, elem.nb))) {
acc
} else {
acc : elem
}
}
id1如果和id2被反轉為相同的值,我想洗掉重復項nb(如代碼注釋中所述)
我試過了,foldLeft但速度很慢(我的串列有 400k 條目)
有人有這個用例的神奇解決方案嗎?
謝謝 !
uj5u.com熱心網友回復:
如果僅考慮 id 的相等性 - 一種選擇是distinctBy在“有序”元組上使用:
val result = myList.distinctBy(c => if (c.id1 > c.id2) (c.id1, c.id2) else (c.id2, c.id1))
對于應該考慮所有三個成員的情況 - 我會“重新排序” idsMyClass并使用distinct:
val result = myList.map {
case MyClass(id1, id2, v) if id1 > id2 => MyClass(id2, id1, v)
case c => c
}.distinct
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467508.html
上一篇:根據引數顯示列
下一篇:試圖阻止應用懸停效果的問題
