加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 删除列表中指定相等函数的重复项

发布时间:2020-12-16 09:16:09 所属栏目:安全 来源:网络整理
导读:我有一个列表[A],给出一个相等函数(a:A,b:A)=如何删除重复的惯用方法布尔?我通常不能重写等于A 我现在可以想到的方式是创建一个包覆类AExt,覆盖的等于,然后 list.map(new AExt(_)).distinct 但是我想知道是否有更清洁的方法. 解决方法 我必须说,我想我会
我有一个列表[A],给出一个相等函数(a:A,b:A)=>如何删除重复的惯用方法布尔?我通常不能重写等于A

我现在可以想到的方式是创建一个包覆类AExt,覆盖的等于,然后

list.map(new AExt(_)).distinct

但是我想知道是否有更清洁的方法.

解决方法

我必须说,我想我会经过一个中间集合,如果你希望你的列表可能会很久,因为测试存在(通过存在或找到)在一个Seq是O(n)当然是:

而不是写一个自定义的等于;决定元素相等的属性.所以代替:

def myCustomEqual(a1: A,a2: A) = a1.foo == a2.foo && a1.bar == a2.bar

做一个钥匙像这样:

type Key = (Foo,Bar)
def key(a: A) = (a.foo,a.bar)

然后,您可以将密钥添加到集合,以查看您之前是否遇到过.

var keys = Set.empty[Key]
((List.empty[A] /: as) { (l,a) => 
  val k = key(a)
  if (keys(k)) l else { keys += k; a +: l  }
}).reverse

当然,这个解决方案具有更差的空间复杂性和潜在的更差的性能(因为你创建了额外的对象 – 键)在很短的列表的情况下.如果你不喜欢在折叠中的var,你可能想看看如何使用状态和横幅从scalaz 7

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读