如何订购Dictionary基于字典的int值
本文关键字:int 字典 于字典 Dictionary 何订购 string | 更新日期: 2023-09-27 18:19:00
我有这个列表:
List<Dictionary<int, string>> list = new List<Dictionary<int, string>>();
,我想根据字典的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
我想对列表进行排序,所以当我循环它并得到字符串时,我打印"hello my name is 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);
如果你想使用List而不是dictionary(在你的情况下似乎不是很好),你可以这样做;
List<KeyValuePair<int,string>> lst1 = new List<KeyValuePair<int,string>>();
var result = lst1.OrderBy(x=>x.Key).ToLookup(x=>x);
在定义泛型时可以使用SortedDictionary或SortedList。当您这样做时,无论以何种顺序向Dictionary中添加元素,元素都将以基于key-element(在您的示例中为int类型)的排序格式存储。此外,SortedDictionary使用BinarySearch树,这使得它更省时。
一旦有了单个字典,就可以根据字典中的键创建一个有序的值列表,如下所示,使用LINQ:
var dict = new List<Dictionary<int, string>>();
var list = dict.OrderBy(e => e.Key).ToList();
如果没有LINQ,你可以使用SortedList
:
SortedList<int, string> sortList = new SortedList<int, string>(dict);
如果你想要一个普通的List<T>
,那么:
List<string> list = new List<string>(sortList.Values);
然而,Marco,我把上面的场景作为一个挑战,并对您想要的结果进行了代码实现。我在下面张贴代码。简而言之,您必须创建另一个列表来存储已排序的字典元素。您可以在调试器中运行以下代码,并自己查看结果。
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();
}
}
快乐编码:)