gpt4 book ai didi

list - 在 Scala 中,基于与另一个元素的相似性来删除列表中元素的最有效方法是什么?

转载 作者:行者123 更新时间:2023-12-01 23:18:56 25 4
gpt4 key购买 nike

我有一长串大约 300 个对象,列表中的每个对象都具有以下数据结构:

case class MyObject(id: String,
name: String,
colour: String,
price: Int
height: Int
width: Int,
desc: String)

我不知道什么是遍历列表的最佳方法,对于每个对象,删除具有相同名称、颜色、价格、高度和宽度的任何其他对象。请注意,这不是简单的重复数据删除,因为 ids 和 desc 可能不同。输入和输出需要保持 List[MyObject] 并且我事先不知道哪些对象是重复的。

这是我最初的有效解决方案,但不确定它是处理大型列表时最有效的方法。

def removeDuplicates(originalList: List[MyObject]): List[MyObject] = {

def loop(remaining: List[MyObject], acc: List[MyObject]): List[MyObject] = {
remaining match {
case head :: tail =>
val listOfDuplicates = tail.filter{ x =>
x.name == head.name &&
x.colour == head.colour &&
x.price == head.price &&
x.height == head.height &&
x.width == head.width
}

val deDupedTail = tail.filter(!listOfDuplicates.contains(_))

loop(deDupedTail, acc ::: listOfDuplicates)
case Nil => acc
}
}
val listOfDuplicateObjects = loop(originalList, List())
originalList.filter(!listOfDuplicateObjects.contains(_))
}

最佳答案

不确定它是否最有效,但恕我直言,它很优雅:

originalList.distinctBy(o => (o.name, o.colour, o.price, o.height, o.width))

关于list - 在 Scala 中,基于与另一个元素的相似性来删除列表中元素的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68381962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com