问题标签 [ordered-set]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
415 浏览

javascript - 集合与有序集合

你能给我一个例子什么时候使用OrderedSet而不是Set?我已经运行了几个测试,甚至immutable-js 文档

Set 的迭代顺序是不确定的,但是是稳定的

内部的元素顺序似乎Set总是与添加元素的顺序相同。这似乎是该OrderedSet结构的唯一好处:

一种 Set 类型,它具有额外的保证值的迭代顺序将是它们被添加的顺序。

0 投票
5 回答
78 浏览

java - 唯一包含键但在不同字段上排序的集合

我正在寻找一个 Java 集合,可能在标准库中,它能够收集以下结构:

并具有以下属性:

  • 只允许一个具有相同密钥的项目(如一组)
  • 在最大 O(logn) 中插入、删除、检查是否存在
  • 按分数排序的遍历,在最大 O(logn) 中找到下一个

据我了解,标准 OrderedSet 必须具有与 equals() 接口一致的可比较接口,但这不是我的情况,因为具有不同键的两个项目可能具有相同的分数。

事实上,我注意到 TreeSet 使用返回 0 的比较器来检查项目是否已经存在。

有什么建议吗?

0 投票
0 回答
225 浏览

rust - 如何使用运行时定义的比较器定义有序 Map/Set?

这类似于如何在 BTreeSet 中使用自定义比较器函数?但是在我的情况下,直到运行时我才会知道排序标准。可能的标准是广泛的,不能硬编码(想想像按目标距离排序或按有效负载中的特定字节或其组合排序)。创建地图/集后,排序标准不会改变。

我看到的唯一选择是:

  • 使用 a Vec,但 log(n) 插入和删除至关重要
  • 用排序标准(直接或间接)包装每个元素,但这似乎很浪费

这对于标准 C++ 容器std::map/是可能的,但对于 Rust 的/std::set似乎是不可能的。标准库或另一个板条箱中是否有替代方案可以做到这一点?还是我必须自己实施?BTreeMapBTreeSet


我的用例是一个类似数据库的系统,其中集合中的元素由模式定义,例如:

但由于模式是用户在运行时定义的,因此元素存储在一组字节 ( BTreeSet<Vec<u8>>) 中。同样,元素的顺序是用户定义的。所以我会给的比较器BTreeSet看起来像|a, b| schema.cmp(a, b)。硬编码,上面的例子可能看起来像:

0 投票
1 回答
81 浏览

select - Erlang Mnesia select on an ordered_set 是否给出了 Erlang Term 顺序的列表?

在文档中,我不清楚我是否需​​要按照 next 或 foldl 的顺序进行迭代(提到 foldr 与ordered_set 的顺序相反,因此推测 foldl 的顺序相同)或者我是否可以使用 select 并依赖它被排序(假设 ordered_set 表)

0 投票
3 回答
45 浏览

python - 在执行排序条件时查找两个列表或数据框之间的交集

我有两个列表(来自两个单独的 pandas 数据框的列),并且希望在保留顺序或基于条件排序的同时找到两个列表的交集。考虑以下示例:

变量 answer 产生重叠列,但不保留顺序。有没有办法对解决方案进行排序,使得答案产生:

即首先按月(“MO”)和整数对相交列表进行排序,然后按年(“YR”)及其整数排序?

或者,是否有一种 pandas 方法可以通过两个重叠列的数据帧(保留或声明顺序)获得相同的结果?