Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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#_.net - Fatal编程技术网

C# 字典顺序/排序问题

C# 字典顺序/排序问题,c#,.net,C#,.net,Animals是一个包含Animal类对象的字典类。DictionaryBase实现IDictionaryEnumerator.GetEnumerator(),我对它显示条目的方式有问题 在下面的代码中,我假设它将以添加条目的相同顺序显示条目,但是,结果表明它们的显示方式完全不同 动物我的动物=新动物(); myAnimals.添加(“Swordy”,新动物(“Swordy”); 添加(“Kollie”,新动物(“Kollie”); 添加(“查理”,新动物(“查理”); 添加(“公斤”,新动物(

Animals是一个包含Animal类对象的字典类。DictionaryBase实现IDictionaryEnumerator.GetEnumerator(),我对它显示条目的方式有问题

在下面的代码中,我假设它将以添加条目的相同顺序显示条目,但是,结果表明它们的显示方式完全不同

动物我的动物=新动物();
myAnimals.添加(“Swordy”,新动物(“Swordy”);
添加(“Kollie”,新动物(“Kollie”);
添加(“查理”,新动物(“查理”);
添加(“公斤”,新动物(“公斤”);
我的动物。添加(“阿尔法”,新动物(“阿尔法”);
//用foreach循环显示所有条目
foreach(字典entry myEntry in myAnimals)
{
WriteLine(“名为{0}.”,((Animal)myEntry.Value.Name)的条目);
}
此代码导致此输出(在我看来是随机的):


这些条目是如何排序的?有办法改变吗?

字典不保证任何顺序。元素的存储方式是以牺牲顺序为代价最大限度地提高查找性能


您需要使用不同的类(如SortedList)或在使用值时对其进行排序。

字典不保证任何顺序。元素的存储方式是以牺牲顺序为代价最大限度地提高查找性能


您需要使用不同的类(如SortedList)或在使用值时对其进行排序。

使用a。

使用a。

字典使用哈希表存储对象,因此默认排序基于插入字典的每个键的GetHashCode方法。 您可以使用LINQ for ex对字典进行排序:

myAnimals.OrderBy(e => ((Animal)e.Value).Name)

字典使用哈希表存储对象,因此默认排序基于插入字典的每个键的GetHashCode方法。 您可以使用LINQ for ex对字典进行排序:

myAnimals.OrderBy(e => ((Animal)e.Value).Name)

DictionaryBase
不维护项的添加顺序。您需要在派生类中实现排序

DictionaryBase
不维护项的添加顺序。如果要重复key look at KeyedCollection中的属性,则需要在派生类中实现排序

StringCollection是一个KeyedCollection

foreach (StringStringO ssO in stringStringCollection.OrderBy(x => x.String1).ThenBy(x => x.String2))
{
    Console.WriteLine(string.Format("HashCode {0} String1 {1} String2 {2} ", ssO.GetHashCode(), ssO.String1, ssO.String2));
}

如果要重复键中的属性,请查看KeyedCollection

StringCollection是一个KeyedCollection

foreach (StringStringO ssO in stringStringCollection.OrderBy(x => x.String1).ThenBy(x => x.String2))
{
    Console.WriteLine(string.Format("HashCode {0} String1 {1} String2 {2} ", ssO.GetHashCode(), ssO.String1, ssO.String2));
}

“条目是如何排序的?”它们不是。如何实现
Animals
呢?能否使用SortedList类而不是Dictionarybase?Animals只是一个简单的字典。它有Add、Remove和indexer,其他一切都是继承的,包括GetEnumerator“条目是如何排序的?”它们不是。如何实现
Animals
呢?能否使用SortedList类而不是Dictionarybase?Animals只是一个简单的字典。它有Add、Remove和indexer,其他一切都是继承的,包括getEnumerator,因为它回答了条目如何排序的问题,您也指出了如何排序。我将接受它作为最佳答案,因为它回答了条目如何排序的问题,您还指出了如何对它们进行排序。