Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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#_Data Structures - Fatal编程技术网

C# 支持排序的最佳数据结构

C# 支持排序的最佳数据结构,c#,data-structures,C#,Data Structures,我目前正试图找出哪种数据结构可能是最好的。下面是我想做的: 我有一个对象和一个与此对象关联的值。我想知道结构中哪个条目的值最小 例如,如果我有以下对象: ZebraObject, 10 CowObject, 1 DogObject, 2 我想知道哪个对象的值最小(在本例中,哪个是CowObject)。我还必须访问CowObject内部的数据(调用一些函数,进行一些计算等),最后,我将执行类似“value+=value”的操作。因此,在我访问了CowObject之后,数据将如下所示 Ze

我目前正试图找出哪种数据结构可能是最好的。下面是我想做的:

我有一个对象和一个与此对象关联的值。我想知道结构中哪个条目的值最小

例如,如果我有以下对象:

 ZebraObject, 10
 CowObject, 1
 DogObject, 2
我想知道哪个对象的值最小(在本例中,哪个是CowObject)。我还必须访问CowObject内部的数据(调用一些函数,进行一些计算等),最后,我将执行类似“value+=value”的操作。因此,在我访问了CowObject之后,数据将如下所示

 ZebraObject, 10
 CowObject, 2 // (1 + 1)
 DogObject, 2
有人能帮我找出适合这种情况的最佳数据结构吗


编辑:我假设每个元素(至少对于对象)都是唯一的。与对象关联的浮点值可以重复。

排序集有助于满足您的要求。但排序集不允许重复。用于根据对象的特定字段进行排序,请实现IComparer

你可能会得到更多的帮助

如果要绑定到列表,ObservableCollection是最好的方法。它已经实现了INotifyPropertyChanged接口。也许可以让您的Viewmodel继承自observablecollection

看起来您需要一个最小堆。在这种情况下,最小对象将位于堆的顶部,并且需要O(1)个时间才能获得其值。我完全忘记了最小堆!!非常感谢@SerhiyChupryk,根据你的建议,值1,2,10将被视为键和MIHEAP将是理想的,但目前的OP试图考虑修改这些键随着时间的推移,将包含重复的键。哦,是的,最小/最大堆可以包含重复项。我在一开始的思维过程中认为ZebraObject、CowObject、DogObject是键,10,1,2是值。我应该换一种想法。(谢谢你指出minheap)你有没有遇到SortedSet?@tomab我刚查过。但是为了使用SortedSet,我需要将float值设置为对象的一个成员查看msdn上的SortedSet,似乎我需要将float值保留为object类的一个成员。有没有办法把这两个分开?意思是你想保留,如果你想保留,那么你可以使用是的,我想保留,甚至。我只需要能够访问这两个数据,并修改他们以及。意味着你想保留,如果这一点,那么你可以使用字典或列表。参考以下链接1)2)