C# 在C语言中如何根据字典中的键对数据进行排序#

C# 在C语言中如何根据字典中的键对数据进行排序#,c#,linq,C#,Linq,我正在用字典收集一些信息。收集详细信息后,我需要使用var变量根据键对字典值进行排序。 之后,我需要将排序后的var变量插入到新字典中。在这里,我很难将排序后的数据插入字典 我在这里发布我的代码: var orderDic = from dic in dictionaryColl orderby dic.Key ascending select dic; Dictionary<int, strin

我正在用字典收集一些信息。收集详细信息后,我需要使用var变量根据键对字典值进行排序。 之后,我需要将排序后的var变量插入到新字典中。在这里,我很难将排序后的数据插入字典

我在这里发布我的代码:

var  orderDic = from dic in dictionaryColl
                orderby dic.Key  ascending
                select dic;             
Dictionary<int, string> newDic = new Dictionary<int, string>();
newDic =(Dictionary<int,string>)orderDic;  // Here i'm not able to assign data to dictionary
var orderDic=来自dictionaryColl中的dic
按dic排序。键升序
选择dic;
Dictionary newDic=新字典();
newDic=(字典)orderDic;//在这里,我无法将数据分配给字典

提前感谢。

您可以直接将其转换为字典,如:

Dictionary<int, string> newDic  = (from dic in dictionaryColl
                                  orderby dic.Key ascending
                                  select dic)
                                 .ToDictionary(r => r.Key, r => r.Value);

您可以直接将其转换为字典,如:

Dictionary<int, string> newDic  = (from dic in dictionaryColl
                                  orderby dic.Key ascending
                                  select dic)
                                 .ToDictionary(r => r.Key, r => r.Value);
你只需要

newDic = orderDic.ToDictionary(x=> x.Key, x => x.Value);
然而,这并没有多大帮助,因为ORDERBY子句不会影响字典顺序

有可能你想要一个

你只需要

newDic = orderDic.ToDictionary(x=> x.Key, x => x.Value);
然而,这并没有多大帮助,因为ORDERBY子句不会影响字典顺序

有可能你想要一个

你可以用

var _ordered = _dic.OrderBy(d => d.key).ToDictionary(d => d.Key, d => d.Value); 
var _ordered = _dic.OrderByDescending(d => d.key).ToDictionary(d => d.Key, d => d.Value); 
方法将字典按升序排序

你可以用

var _ordered = _dic.OrderBy(d => d.key).ToDictionary(d => d.Key, d => d.Value); 
var _ordered = _dic.OrderByDescending(d => d.key).ToDictionary(d => d.Key, d => d.Value); 
方法将字典按降序排序

或者如果你想替换同一本字典 然后

如果你原来的字典是

_dic=new Dictionary<int, string>(_ordered);
\u dic=新词典(\u订购);
请通过下面的代码

class Program
{
    static void Main(string[] args)
    {
        Dictionary<int,string> _dic=new Dictionary<int,string>();
        _dic.Add(5,"xyz");
        _dic.Add(2,"abc");
        _dic.Add(1,"pqr");
        _dic.Add(4,"test");
        _dic.Add(3,"pvf");

        var _ordered=_dic.OrderBy(d => d.Key).ToDictionary(d=> d.Key,d=>d.Value);
        _dic=new Dictionary<int,string>(_ordered);
    }
}
类程序
{
静态void Main(字符串[]参数)
{
字典_dic=新字典();
_dic.添加(5,“xyz”);
_dic.添加(2,“abc”);
_dic.添加(1,“pqr”);
_dic.添加(4,“试验”);
_dic.添加(3,“pvf”);
var\u ordered=\u dic.OrderBy(d=>d.Key).ToDictionary(d=>d.Key,d=>d.Value);
_dic=新字典(按顺序排列);
}
}
您可以调试上述应用程序,并检查dic是否具有基于键的已排序词典。

您可以使用

var _ordered = _dic.OrderBy(d => d.key).ToDictionary(d => d.Key, d => d.Value); 
var _ordered = _dic.OrderByDescending(d => d.key).ToDictionary(d => d.Key, d => d.Value); 
方法将字典按升序排序

你可以用

var _ordered = _dic.OrderBy(d => d.key).ToDictionary(d => d.Key, d => d.Value); 
var _ordered = _dic.OrderByDescending(d => d.key).ToDictionary(d => d.Key, d => d.Value); 
方法将字典按降序排序

或者如果你想替换同一本字典 然后

如果你原来的字典是

_dic=new Dictionary<int, string>(_ordered);
\u dic=新词典(\u订购);
请通过下面的代码

class Program
{
    static void Main(string[] args)
    {
        Dictionary<int,string> _dic=new Dictionary<int,string>();
        _dic.Add(5,"xyz");
        _dic.Add(2,"abc");
        _dic.Add(1,"pqr");
        _dic.Add(4,"test");
        _dic.Add(3,"pvf");

        var _ordered=_dic.OrderBy(d => d.Key).ToDictionary(d=> d.Key,d=>d.Value);
        _dic=new Dictionary<int,string>(_ordered);
    }
}
类程序
{
静态void Main(字符串[]参数)
{
字典_dic=新字典();
_dic.添加(5,“xyz”);
_dic.添加(2,“abc”);
_dic.添加(1,“pqr”);
_dic.添加(4,“试验”);
_dic.添加(3,“pvf”);
var\u ordered=\u dic.OrderBy(d=>d.Key).ToDictionary(d=>d.Key,d=>d.Value);
_dic=新字典(按顺序排列);
}
}

您可以调试上述应用程序并检查_dic是否具有基于键的已排序字典。

为什么不在第一位使用SortedDictionary()?

为什么不在第一位使用SortedDictionary()?

newDic=(字典).OrderBy(l=>l.ColName).ToList();
其中,
ColName
是要应用排序或排序的列的名称。

newDic=(Dictionary).OrderBy(l=>l.ColName).ToList();


其中,
ColName
是要应用排序或排序的列的名称。

字典本质上是不排序的。它们使用散列函数对键进行散列,以获取值的条目。net中有一个可供使用的已排序字典数据结构。字典本质上是未排序的。它们使用散列函数对键进行散列,以获取值的条目。在.net中有一个排序字典数据结构,您可能想使用它,
OrderBy
在这里到底实现了什么?@Habib我没有投反对票,但正如罗琳所指出的那样,OrderBy不会这样做anything@BobVale,还有罗琳,是的,访问元素与顺序无关。@Habib顺序与顺序无关<代码>字典没有排序。
OrderBy
在这里到底实现了什么?@Habib我没有否决,但正如罗琳所指出的,OrderBy不会这么做anything@BobVale,和Rawling,是的,访问元素与顺序无关。@Habib顺序与顺序无关<代码>字典未排序。@Habib不,不会排序。字典的顺序是不确定的——请参阅此@Habib no it will not接受的答案。字典的顺序是不确定的——正如前面所说的那样,在插入字典之前对条目进行排序是没有帮助的。字典是无序的。使用SortedDictioanry代替EADI am将已排序的字典存储在新字典中,就像在前面提到的查询中一样,它将在var中获得结果,然后将其存储到另一个字典中。这里我跳过了Var的使用,直接将字典存储在dictionary()的新实例中。重点是字典不会按升序排列。字典没有分类。orderby将不起作用,因此,orderby方法将按照上述语句中键的升序对字典进行排序。如果字典是升序的,那么对字典排序有什么用呢???orderBy对IEnumerable结果进行排序。把字典分类没有意义。这就是重点。这本词典将忽略你的订单。您需要一种不同的解决方案,如前面所述,在插入词典之前对条目进行排序没有帮助。字典是无序的。使用SortedDictioanry代替EADI am将已排序的字典存储在新字典中,就像在前面提到的查询中一样,它将在var中获得结果,然后将其存储到另一个字典中。这里我跳过了Var的使用,直接将字典存储在dictionary()的新实例中。重点是字典不会按升序排列。字典没有分类。orderby将不起作用,因此,orderby方法将按升序对字典进行排序