Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 如何订购词典列表<;int,string>;基于字典int值?_C#_Linq_List_Dictionary - Fatal编程技术网

C# 如何订购词典列表<;int,string>;基于字典int值?

C# 如何订购词典列表<;int,string>;基于字典int值?,c#,linq,list,dictionary,C#,Linq,List,Dictionary,我有以下清单: List<Dictionary<int, string>> list = new List<Dictionary<int, string>>(); List List=新列表(); 我想根据字典的int值对它进行排序(升序)。我怎么做 例如: Dictionary<int, string> Min1 = new Dictionary<int, string>(); Dictionary<int, s

我有以下清单:

List<Dictionary<int, string>> list = new List<Dictionary<int, string>>();
List List=新列表();
我想根据字典的int值对它进行排序(升序)。我怎么做

例如:

Dictionary<int, string> Min1 = new Dictionary<int, string>();
Dictionary<int, string> Min2 = new Dictionary<int, string>();
Dictionary<int, string> Min3 = new Dictionary<int, string>();
Dictionary<int, string> Min4 = new Dictionary<int, string>();
Dictionary<int, string> Min5 = new Dictionary<int, string>();

Min1.Add(3, "name");
Min2.Add(1, "hello");
Min3.Add(5, "marco");
Min4.Add(4, "is");
Min5.Add(2, "my");

List<Dictionary<int, string>> list = new List<Dictionary<int, string>>();
list.Add(Min1);
list.Add(Min2);
list.Add(Min3);
list.Add(Min4);
list.Add(Min5);

// NOW I NEED TO ORDER list BASED ON DICTIONARY INT VALUE
// SO THE ORDER ON THE LIST SHOULD BE Min2, Min5, Min1, Min4, Min3
Dictionary Min1=newdictionary();
Dictionary Min2=新字典();
Dictionary Min3=新字典();
Dictionary Min4=新字典();
Dictionary Min5=新字典();
Min1.添加(3,“名称”);
Min2.添加(1,“你好”);
Min3.添加(5,“马可”);
Min4.添加(4,“是”);
Min5.添加(2,“我的”);
列表=新列表();
列表。添加(Min1);
列表。添加(Min2);
列表。添加(Min3);
列表。添加(Min4);
列表。添加(Min5);
//现在我需要根据字典INT值对列表进行排序
//所以列表上的顺序应该是Min2,Min5,Min1,Min4,Min3

我想对列表进行排序,因此当我循环它并到达字符串时,我会打印“您好,我的名字是marco”

如果您想展平数据并对其进行排序,您可以尝试以下操作:

list.SelectMany(x=>x).OrderBy(x=>x.Key)
但是,如果您不喜欢将数据展平并对字典进行排序,您可以这样做:

list.Select(x=>x.OrderBy(y=>y.Key));
编辑:据我所知,您只需要使用一本字典,因此您可以执行以下操作:

Dictionary<int,string> dic = new Dictionary<int,string>();
var result = dic.OrderBy(x=>x.Key).ToLookup(x=>x);
Dictionary dic=newdictionary();
var result=dic.OrderBy(x=>x.Key).ToLookup(x=>x);
如果你想使用列表而不是字典(在你的情况下似乎不好),你可以这样做

 List<KeyValuePair<int,string>> lst1 = new List<KeyValuePair<int,string>>();
 var result = lst1.OrderBy(x=>x.Key).ToLookup(x=>x);
List lst1=新列表();
var result=lst1.OrderBy(x=>x.Key).ToLookup(x=>x);

定义泛型时,可以使用SortedDictionary或SortedList。 当您这样做时,无论您以何种顺序将元素添加到字典中,元素都将基于键元素(在您的示例中为int类型)以排序格式存储。
此外,SortedDictionary使用BinarySearch tree,这使它更省时。

一旦有了一个字典,就可以使用LINQ根据字典中的键创建一个有序的值列表,如下所示:

var dict = new List<Dictionary<int, string>>();
var list = dict.OrderBy(e => e.Key).ToList();
由此,如果您想要一个普通的
列表
,那么:

List<string> list = new List<string>(sortList.Values);
List List=新列表(sortList.Values);

然而,Marco,我将上述场景视为一个挑战,并对您想要的结果进行了代码实现。我把代码贴在下面。在nutshell中,您必须创建另一个存储已排序字典元素的列表。您可以在调试器中运行以下代码,并自行查看结果

 public class program
{

    public static void Main()
    {

  SortedDictionary<int, string> Min1 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min2 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min3 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min4 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min5 = new SortedDictionary<int, string>();
      Min1.Add(3, "name");
      Min2.Add(1, "hello");
      Min3.Add(5, "marco");
      Min4.Add(4, "is");
      Min5.Add(2, "my");

 List<SortedDictionary<int, string>> list = new List<SortedDictionary<int, string>>();
        list.Add(Min1);
        list.Add(Min2);
        list.Add(Min3);
        list.Add(Min4);
        list.Add(Min5);

        List<SortedDictionary<int, string>> final_list = new List<SortedDictionary<int, string>>();
        List<int> index = new List<int>() ;

        foreach (var element in list)
        {
            foreach (var elements in element)
            {
                index.Add(elements.Key);
                Console.Write(" " +elements.Value+ " ");
            }
        }
        index.Sort();


        foreach (var indexelement in index)
        {
            foreach (var element in list)
            {
                foreach (var elements in element)
                {
                    if (indexelement == elements.Key)
                    {
                        final_list.Add(element);
                    }

                }

            }
        }
        Console.WriteLine();
        foreach (var element in final_list)
        {
            foreach (var elements in element)
            {
                Console.Write(" " + elements.Value+ " ");
            }
        }

        Console.ReadLine();
    }
}
公共类程序
{
公共静态void Main()
{
SortedDictionary Min1=新的SortedDictionary();
SortedDictionary Min2=新的SortedDictionary();
SortedDictionary Min3=新的SortedDictionary();
SortedDictionary Min4=新的SortedDictionary();
SortedDictionary Min5=新的SortedDictionary();
Min1.添加(3,“名称”);
Min2.添加(1,“你好”);
Min3.添加(5,“马可”);
Min4.添加(4,“是”);
Min5.添加(2,“我的”);
列表=新列表();
列表。添加(Min1);
列表。添加(Min2);
列表。添加(Min3);
列表。添加(Min4);
列表。添加(Min5);
列表最终列表=新列表();
列表索引=新列表();
foreach(列表中的var元素)
{
foreach(元素中的var元素)
{
index.Add(elements.Key);
Console.Write(“+elements.Value+”);
}
}
index.Sort();
foreach(索引中的var indexelement)
{
foreach(列表中的var元素)
{
foreach(元素中的var元素)
{
if(indexelement==elements.Key)
{
最终列表。添加(元素);
}
}
}
}
Console.WriteLine();
foreach(最终列表中的var元素)
{
foreach(元素中的var元素)
{
Console.Write(“+elements.Value+”);
}
}
Console.ReadLine();
}
}

快乐编码:)

您能给出一个您想要的排序示例吗?这没有多大意义。是否要按每个字典中最小的键排序?您必须有一个值来比较不同的词典,并且需要选择它是哪一个。您可以使用SortedList类您的示例不显示词典和列表之间的关系,您在示例中所说的字典只是键值对而不是字典。但您的字典并不好至少有一个大小为2的字典并显示您想要的,事实上在当前示例中,您只需要键值对而不是字典,事实上它们都可以在一个字典中。还有一件事,我想知道您为什么使用5个字典,而单个字典(min1)可以存储所有的键值对。
 public class program
{

    public static void Main()
    {

  SortedDictionary<int, string> Min1 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min2 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min3 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min4 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min5 = new SortedDictionary<int, string>();
      Min1.Add(3, "name");
      Min2.Add(1, "hello");
      Min3.Add(5, "marco");
      Min4.Add(4, "is");
      Min5.Add(2, "my");

 List<SortedDictionary<int, string>> list = new List<SortedDictionary<int, string>>();
        list.Add(Min1);
        list.Add(Min2);
        list.Add(Min3);
        list.Add(Min4);
        list.Add(Min5);

        List<SortedDictionary<int, string>> final_list = new List<SortedDictionary<int, string>>();
        List<int> index = new List<int>() ;

        foreach (var element in list)
        {
            foreach (var elements in element)
            {
                index.Add(elements.Key);
                Console.Write(" " +elements.Value+ " ");
            }
        }
        index.Sort();


        foreach (var indexelement in index)
        {
            foreach (var element in list)
            {
                foreach (var elements in element)
                {
                    if (indexelement == elements.Key)
                    {
                        final_list.Add(element);
                    }

                }

            }
        }
        Console.WriteLine();
        foreach (var element in final_list)
        {
            foreach (var elements in element)
            {
                Console.Write(" " + elements.Value+ " ");
            }
        }

        Console.ReadLine();
    }
}