【发布时间】:2019-02-05 19:07:42
【问题描述】:
我正在尝试创建一个方法,该方法(名称除外)表明某些集合的顺序将被保留。
我考虑过SortedList,但由于需要持有密钥而将其驳回。由于类似的原因,我还解雇了其他 Sorted 类型,并且 SortedSet 由于 Linq 在您对其进行操作时返回 IEnumerable 而不是另一个 SortedSet。
我不介意是否需要新类型,或者我需要以特定方式编写方法。这里的目标是强调在操作集合时保持集合输入顺序的方法。
我曾考虑添加一个自定义属性并相信它会被正确使用,但我希望找到更明确的语言。
-- 编辑
与其说是集合中元素的顺序(我可以使用IEnumerable),不如说是对输入集合的一些操作。假设我要返回数组中所有数字的根,而不是返回 (root, number)[] 或 (root, index)[] 我想返回 root[] 并让用户清楚返回数组中元素的顺序匹配输入参数中元素的顺序。
【问题讨论】:
-
ordering是指A-Z、0-9、Smallest to Largest等吗? -
那么,如果我添加元素 A、X、Y、B、M 和 G,是否会保留该顺序?没有排序,只保留初始排序?如果您不操作 Insert-ish 方法,标准的 List 类几乎可以做到这一点。
-
应用您的排序并添加到队列以确保保留订单? docs.microsoft.com/en-us/dotnet/api/…
-
"SortedSet 由于 Linq 在您操作时返回 IEnumerable 而不是另一个 SortedSet。"从字面上看,这将排除任何可能的集合,无论是已经存在的,还是可能曾经存在的,因为 LINQ 方法将永远返回任何这样的集合。听起来你只需要
SortedSet,就是这样。如果要使用 LINQ,您需要编写自己的方法来对该集合执行复杂查询,或者根据 LINQ 查询的结果重新创建一个新的排序集合。 -
@Symon 对于任何由比较器确定的有序集合,而不是集合本身。
标签: c# collections rank contract preserve