c# - 根据键对字典列表进行排序

标签 c# linq list sorting dictionary

我有一个包含学生数据的字典列表 有点像

List<Dictionary<string, object>> students = new List<Dictionary<string, object>>();
Dictionary<string, object> std1 = new Dictionary<string, object>();
std1["name"] = "sai";
std1["age"] = 22;
std1["gender"] = "male";
students.Add(std1);

Dictionary<string, object> std2 = new Dictionary<string, object>();
std2["name"] = "Julia";
std2["gender"] = "female";
students.Add(std2);

Dictionary<string, object> std3 = new Dictionary<string, object>();
std3 ["name"] = "sunny";
std3 ["age"] = 23;
students.Add(std3);  

我想根据 nameagegender 对学生列表进行排序,我正在尝试这样的操作:

var ordered = students.OrderBy(x => x["name"]);

如果我尝试使用 agegender 它会返回一个错误,指出找不到 key ,因为 std2 没有 agestd3 没有 gender

我需要所有记录,即使它不包含排序键的值,任何解决此问题的方法,在此先感谢。

最佳答案

最好像这样创建一个类:

public class YourClass
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
}

然后:

List<YourClass> students = new List<YourClass>();
YourClass std1 = new YourClass();
std1.Name = "sai";
std1.Age = 22;
std1.Gender = "male";
students.Add(std1);

yourClass std2 = new yourClass();
std2.Name = "Julia";
std2.Gender = "female";
students.Add(std2);

yourClass std3 = new yourClass();
std3.Name = "sunny";
std3.Age = 23;
students.Add(std3);

var ordered = students.OrderBy(x => x.Name);

这种安排存储了您在多个词典中的相同数据。但是,它更加清晰易懂。

关于c# - 根据键对字典列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32285024/

相关文章:

c# - 无法获得产品数量

C# Array.Contains() 编译错误

c# - 如何关闭(而不是终止)已最小化到系统托盘的应用程序?

c# - 自定义控件边框不显示是否调用 Update(),但显示是否调用 Refresh()

c# - 将字符串解析为可为空的数字类型(1 或 2 行)

arrays - 对具有相同属性的对象进行分组

python - 有条件地将列表中的项目 append 到多个文档中

c# - 使用 IComparer<string> 对 16 个元素进行排序至少进行 100000 次比较

c# - "Lazy"GroupBy 与 Linq

C++ 内部类 Ctor 和参数