Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型不变排序_C#_Sorting - Fatal编程技术网

C# 泛型不变排序

C# 泛型不变排序,c#,sorting,C#,Sorting,我有一套物品。我希望以这样一种方式对它们进行排序,即保证将来的一组(可能不同的)对象排序与我当前的排序一致。在其他语言中,我会使用地址来实现这一点。但在C#中,地址被认为是不安全的。我宁愿避免那样。那么我如何才能实现我的目标呢?我假设您的对象中没有可以排序的标识信息。给每个物体一个人造的这样的属性 class MyClass { public Guid SortKey = Guid.NewGuid(); } 然后按那个键排序。如果无法扩展要排序的对象,请将排序键保存在外部: Dictionar

我有一套物品。我希望以这样一种方式对它们进行排序,即保证将来的一组(可能不同的)对象排序与我当前的排序一致。在其他语言中,我会使用地址来实现这一点。但在C#中,地址被认为是不安全的。我宁愿避免那样。那么我如何才能实现我的目标呢?

我假设您的对象中没有可以排序的标识信息。给每个物体一个人造的这样的属性

class MyClass { public Guid SortKey = Guid.NewGuid(); }
然后按那个键排序。如果无法扩展要排序的对象,请将排序键保存在外部:

Dictionary<object, Guid> sortKeyByObject;
字典sortKeyByObject;
您还可以使用递增整数计数器代替GUID。请确保以线程安全的方式使用它,并注意包装问题(因此请使用
long


不要使用
object.GetHashCode
,因为它不一定是唯一的。

使用
object.GetHashCode()
进行排序


GetHasCode()
将在同一执行中返回一个一致的值(除非您自己严重重写了它),我假设这就是您想要的,因为您提到了内存寻址…

对于不相同的对象,不能保证是唯一的。如果两个对象碰巧得到相同的哈希代码,它们会以未指定的顺序彼此相邻。是的,那么就没有太多可玩的东西了;唯一的其他选择是
ToString()
。如果排序真的很重要,那么您就不会使用通用接口,而是使用一个特定的接口:
IComparable
不清楚地址在这里有什么优势。如果它们是不同的对象,它们将有不同的地址。为什么地址有帮助?你能解释一下“与当前排序一致”在你的情况下是什么意思吗?我的理解是,对象之间没有“更少”的比较——因此,你不能仅仅对它们进行排序;但不知何故,两组不相关的对象之间存在着“一致”的关系。。。一方面,感觉应该能够实现简单的合并排序,因为每2组项都有一些定义的关系,但我不知道关系是什么…如果我有对象A和B,那么有时当两者都在列表中时,A总是在B之前排序,或者A总是在B之后排序。我不在乎哪个,所以结果是一致的。