我经常需要按值排序字典,包括键和值.例如,我有一个单词的散列和各自的频率,我想按频率排序.
有一个SortedList对单个值(比如频率)有好处,我想将它映射回单词.
SortedDictionary按键排序,而不是值.有些人诉诸于自定义课程,但是有更清洁的方法吗?
我已经在这里回答了许多问题.但究竟是什么意思呢?
var test = new Dictionary<int, string>();
test.Add(0, "zero");
test.Add(1, "one");
test.Add(2, "two");
test.Add(3, "three");
Assert(test.ElementAt(2).Value == "two");
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎按预期工作.那么字典被认为是无序的?在什么情况下上面的代码会失败?
我试图使用switch case而不是If Else声明,其中我必须首先检查字符串的长度,并根据我必须做出它的情况.
switch (mystring.length)
{
case <=25:
{
//do this
break;
}
case <50:
{
//do this
break;
}
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
这是我想要做的一些事情,但无法获得如何放在<25案例前面,因为根据开关案例规则它是不合适的.
我需要一个可以存储密钥和项目的环列表字典.Capacity = 50当我添加#51第一个项目时必须删除.基本上它必须是一个行为像环列表的字典.
.NET Framework中有什么可以做到的吗?或者我必须自己写吗?
比如,如果我创建这样的字典:
Dictionary<string, MyClass> dic = new Dictionary<string, MyClass>();
dic.add("z1", val1);
dic.add("abc9", val2);
dic.add("abc8", val3);
dic.add("ABC1", val4);
Run Code Online (Sandbox Code Playgroud)
所以当我这样做时:
foreach (KeyValuePair<string, MyClass> kvp in dic)
{
}
Run Code Online (Sandbox Code Playgroud)
我保证将这些值检索为:"z1","abc9","abc8","ABC1"?
如果我第一次这样做,它会是:"z1","abc8","ABC1"?
dic.Remove("abc9");
Run Code Online (Sandbox Code Playgroud) 我已将哈希表转换为字典.但问题是当我去打印它没有按顺序排列的值时.
aHashtable.Add(1014, "201");
aHashtable.Add(10, "ATIB");
aHashtable.Add(143, "LOVE");
aHashtable.Add(111, "HATE");
var dict= aHashtable.Cast<DictionaryEntry>().ToDictionary(d => d.Key, d => d.Value);
foreach (KeyValuePair<object, object> keyValuePair in dict)
{
Console.WriteLine(keyValuePair.Key + ": " +keyValuePair.Value);
}
Run Code Online (Sandbox Code Playgroud)
有什么问题?
我正在使用a Dictionary<string, object>,我遇到了一个问题,我需要按照它们放在字典中的顺序保存项目,而不是按相应键的字母顺序排列.
有没有办法禁用添加项目的排序,或者更好地使用其他一些自定义类(我想保留所有dic[key] = value和其他访问器)?
如果a不可能Dictionary,我还可以使用哪些仍按键返回项目?
我有一本字典
Dictionary<string, object>
Run Code Online (Sandbox Code Playgroud)
(值可以是字符串,整数或双精度型)。我将字典导出到JSON文件:
JsonConvert.SerializeObject(myDict);
Run Code Online (Sandbox Code Playgroud)
我希望保存的JSON按键排序。
按照相同的顺序,我的意思不是添加键的顺序相同!
说,
1) 我有一本字典 d
2) 我添加 2, 4, 6 作为我的键
3) 现在我通过 d.Keys 属性访问它
现在按照相同的顺序,我的意思是,如果我不断重复步骤 2 和 3。
d.Keys 是否总是以相同的顺序返回键 4、2、6。
鉴于每次都以相同的顺序添加相同的一组键(2,4,6)!
基本上是在字典中添加键是一个确定性的过程?
我已经运行了一些随机样本,看起来Dictionary.Keys 属性每次都为同一组键返回相同的序列。
但是有保证吗?
我试过的示例代码
public static void Main(string[] args)
{
var rand = new Random();
var fixedKeys = Enumerable.Range(1, 100000).Select(x => rand.Next(10000000)).Distinct().ToList();
var dic = new Dictionary<int, string>();
foreach (var item in fixedKeys)
{
dic.Add(item, "");
} …Run Code Online (Sandbox Code Playgroud)