Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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# 在Igroup中对内部集合进行排序<;Tkey,Tsource>;_C#_Sorting_Generics - Fatal编程技术网

C# 在Igroup中对内部集合进行排序<;Tkey,Tsource>;

C# 在Igroup中对内部集合进行排序<;Tkey,Tsource>;,c#,sorting,generics,C#,Sorting,Generics,我有一个员工列表,按部门名称分组,以IEnumerable(变量名depgrpname\u sal\u排序) 我想按各组中的薪资顺序显示这组集合 我试了一下,结果是: foreach (var depgroupname in depgrpname_sal_sort) { Console.WriteLine(depgroupname.Key); var group = depgroupname.Where(g => g.depaname == depgroupname.Key

我有一个员工列表,按部门名称分组,以
IEnumerable
(变量名
depgrpname\u sal\u排序

我想按各组中的薪资顺序显示这组集合

我试了一下,结果是:

foreach (var depgroupname in depgrpname_sal_sort) {
    Console.WriteLine(depgroupname.Key);
    var group = depgroupname.Where(g => g.depaname == depgroupname.Key);

    foreach (employee e in group.OrderBy(e=>e.salary)) {
        Console.WriteLine(e.empId + " " + e.empname + " " + e.depaname + " " + e.salary);
    }
}
输出:

Development
    105 John garry Development 45000
    103 Mark Development 55000
HR
    102 Roger HR 25000
    101 John D HR 35000
Testing
    104 John Testing 25000
我是否正确,或者是否有任何预定义的技术/方法来对内部列表进行排序。

提前感谢

已排序,但如果您希望在高层获得最高工资,则需要使用。例如:

foreach (Employee e in group.OrderByDescending(e => e.salary)) {
    // print...
}

编辑

您询问如何使排序更直接……首先,您可以改进分组:

var employees = new List<Employee>() {
    new Employee("John", "Development", 45000),
    new Employee("Mark", "Development", 55000),
    new Employee("Roger", "HR", 25000),
    new Employee("Jeff", "HR", 35000),
    new Employee("James", "Testing", 25000)
};


foreach (var g in employees.GroupBy(x => x.Dept)) {
    Console.WriteLine(g.Key);
    foreach (var e in g.OrderByDescending(x => x.Salary)) {
        Console.WriteLine(" - {0} makes ${1}/year", e.Name, e.Salary);
    }
}
var employees=新列表(){
新员工(“约翰”,“发展”,45000),
新员工(“马克”,“发展”,55000),
新员工(“罗杰”,“人力资源”,25000),
新员工(“杰夫”,“人力资源部”,35000),
新员工(“詹姆斯”,“测试”,25000)
};
foreach(在employees.GroupBy(x=>x.Dept)中的var g){
控制台写入线(g键);
foreach(变量e,例如OrderByDescending(x=>x.Salary)){
Console.WriteLine(“-{0}每年赚${1}”,e.Name,e.Salary);
}
}
这样,您只需对所有内容进行一次分组,而不是对预先分组的数据进行分组。如果您想按部门对所有内容进行分组,然后对其进行排序,并将其保存为分组和排序,以便以后使用,那么我建议将其转换为
词典

var employees=新列表(){
新员工(“约翰”,“发展”,45000),
新员工(“马克”,“发展”,55000),
新员工(“罗杰”,“人力资源”,25000),
新员工(“杰夫”,“人力资源部”,35000),
新员工(“詹姆斯”,“测试”,25000)
};
var group=employees.GroupBy(x=>x.Dept)
.ToDictionary(
key=>key.key,
value=>新列表(value.OrderByDescending(x=>x.Salary))
);
foreach(分组中的变量g){
控制台写入线(g键);
foreach(以g.值表示的变量e){
Console.WriteLine(“-{0}每年赚${1}”,e.Name,e.Salary);
}
}

谢谢您的回复。。我知道降序。。但是,有没有其他技术可以直接对内部集合进行排序,而不将它们放入可枚举列表
var employees = new List<Employee>() {
    new Employee("John", "Development", 45000),
    new Employee("Mark", "Development", 55000),
    new Employee("Roger", "HR", 25000),
    new Employee("Jeff", "HR", 35000),
    new Employee("James", "Testing", 25000)
};

var grouped = employees.GroupBy(x => x.Dept)
                       .ToDictionary(
                           key => key.Key, 
                           value => new List<Employee>(value.OrderByDescending(x => x.Salary))
                       );

foreach (var g in grouped) {
    Console.WriteLine(g.Key);
    foreach (var e in g.Value) {
        Console.WriteLine(" - {0} makes ${1}/year", e.Name, e.Salary);
    }
}