是否可以为 collection 提供订购保证?
Is it possible to provide an ordering guarantee for a collection?
我正在尝试创建一个方法(除了名称之外)表明某些 collection 的顺序将被保留。
我考虑过SortedList
,但由于需要持有钥匙而放弃了。出于类似的原因,我也解雇了其他排序类型,并且 SortedSet
由于 Linq
returning IEnumerable
而不是另一个 SortedSet
当您对其进行操作时。
我不介意是否需要新类型,或者我需要以特定方式编写方法。这里的目标是突出显示在操作 collection 时保留其输入顺序的方法。
我考虑过添加自定义属性并相信它会被正确使用,但理想情况下我希望找到更明确的语言。
-- 编辑
与其说是 collection 中元素的顺序(我可以使用 IEnumerable
),不如说是对输入 collection 的一些操作。假设我 returning 数组中所有数字的根,而不是 returning (root, number)[]
,或者 (root, index)[]
我想 return root[]
并让用户清楚,returned 数组中元素的顺序与输入参数中元素的顺序相匹配。
听起来你想要 queue。第一个添加的对象将最先被删除,因此插入顺序得以保留。通常使用 Dequeue()
方法处理队列外的对象,但如果您不想从集合中删除,可以使用 Peek()
方法。
除此之外,您可能需要推出自己的实现。它可能只是 List<T>
的包装器,您可以在其中防止任何内容被 Insert
ed。
不,C# 或 .Net 中没有任何内容可以让您表达和执行 "this method does not change order of elements in a collection / while iterating through collection"。
传统期望是在迭代时保留集合中存储的元素的顺序,除非method/class明确命名以指示重新排序。
"no reordering"的例子:
for
/ 'foreach`
.Select
、.First
、.Take
、.SelectMany
、.Where
- 索引未调用的集合 "SortedXxxxx" -
List
,数组。
"does reordering"
的例子
List.Sort
、List.Reverse
.OrderBy
、.ThenBy
- 类 不像
HashSet
、Dictionary
、OrderedDictionary
、SortedList
那样 preserve/guarantee 排序
我正在尝试创建一个方法(除了名称之外)表明某些 collection 的顺序将被保留。
我考虑过SortedList
,但由于需要持有钥匙而放弃了。出于类似的原因,我也解雇了其他排序类型,并且 SortedSet
由于 Linq
returning IEnumerable
而不是另一个 SortedSet
当您对其进行操作时。
我不介意是否需要新类型,或者我需要以特定方式编写方法。这里的目标是突出显示在操作 collection 时保留其输入顺序的方法。
我考虑过添加自定义属性并相信它会被正确使用,但理想情况下我希望找到更明确的语言。
-- 编辑
与其说是 collection 中元素的顺序(我可以使用 IEnumerable
),不如说是对输入 collection 的一些操作。假设我 returning 数组中所有数字的根,而不是 returning (root, number)[]
,或者 (root, index)[]
我想 return root[]
并让用户清楚,returned 数组中元素的顺序与输入参数中元素的顺序相匹配。
听起来你想要 queue。第一个添加的对象将最先被删除,因此插入顺序得以保留。通常使用 Dequeue()
方法处理队列外的对象,但如果您不想从集合中删除,可以使用 Peek()
方法。
除此之外,您可能需要推出自己的实现。它可能只是 List<T>
的包装器,您可以在其中防止任何内容被 Insert
ed。
不,C# 或 .Net 中没有任何内容可以让您表达和执行 "this method does not change order of elements in a collection / while iterating through collection"。
传统期望是在迭代时保留集合中存储的元素的顺序,除非method/class明确命名以指示重新排序。
"no reordering"的例子:
for
/ 'foreach`.Select
、.First
、.Take
、.SelectMany
、.Where
- 索引未调用的集合 "SortedXxxxx" -
List
,数组。
"does reordering"
的例子List.Sort
、List.Reverse
.OrderBy
、.ThenBy
- 类 不像
HashSet
、Dictionary
、OrderedDictionary
、SortedList
那样 preserve/guarantee 排序