Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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

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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/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#如何将两个列表排序为一个?_C#_Sorting - Fatal编程技术网

C#如何将两个列表排序为一个?

C#如何将两个列表排序为一个?,c#,sorting,C#,Sorting,因此,我有一个结构: struct Employee { public int id; public string name; public string pw; public bool leader; } 然后我从一个文本文件中读取数据 List<Employee> employees = new List<Employee>(); using (StreamReader sr = new StreamReade

因此,我有一个结构:

struct Employee
{
    public int id;
    public string name;
    public string pw;
    public bool leader;
}
然后我从一个文本文件中读取数据

List<Employee> employees = new List<Employee>();
            using (StreamReader sr = new StreamReader("employees.txt"))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    var temp = line.Split(':');
                    Employee employee = new Employee();
                    employee.id = Convert.ToInt32(temp[0]);
                    employee.name = temp[1];
                    employee.pw = temp[2];
                    if (Convert.ToInt32(temp[3]) == 0)
                    {
                        employee.leader = false;
                    }
                    else
                    {
                        employee.leader = true;
                    }
                    employees.Add(employee);

List<int> projectsnumber = new List<int>();
List employees=newlist();
使用(StreamReader sr=newstreamreader(“employees.txt”))
{
而((line=sr.ReadLine())!=null)
{
var temp=行分割(':');
员工=新员工();
employee.id=转换为32(临时[0]);
employee.name=temp[1];
employee.pw=temp[2];
如果(转换为32(温度[3])==0)
{
employee.leader=false;
}
其他的
{
employee.leader=true;
}
employees.Add(employees);
列表项目成员=新列表();

如果他们在项目中工作,我会将[employeeid]+;(我也会从文本文件中读取)。如果我在结构中创建ProjectsMember,则无法修改其值。问题出现在这里。我必须根据员工参与的项目数量显示员工的姓名。我可以按降序排列projectnumber,但无法显示他们的姓名。如果我在ProjectsMember中查找已排序数字的索引,则如果有2个同样的数字,它只会在员工列表上显示两次。所以,如果我有一个包含数字和姓名的列表,我可以同时写这两个。我该怎么做呢?

只需按项目数量排序员工并选择他们的姓名。使用LINQ很容易:

var names = employees.OrderByDescending(e => projectsnumber[e.id]).Select(e => e.name);
查询语法:

var names = from e in employees
            orderby projectsnumber[e.id] descending
            select e.name;
如果您需要姓名和项目计数,则可以将员工投影为匿名类型:

var query = from e in employees
            let projectsCount = projectsnumber[e.id]
            orderby projectsCount descending
            select new {
               ProjectsCount = projectsCount,
               Name = e.name
            };

注:正如@crashmstr所指出的,最好使用类而不是结构。在C#中,我们使用Pascal Case作为类/结构属性和方法名称。

只需按项目数量对员工排序并选择他们的名称。使用LINQ很容易:

var names = employees.OrderByDescending(e => projectsnumber[e.id]).Select(e => e.name);
查询语法:

var names = from e in employees
            orderby projectsnumber[e.id] descending
            select e.name;
如果您需要姓名和项目计数,则可以将员工投影为匿名类型:

var query = from e in employees
            let projectsCount = projectsnumber[e.id]
            orderby projectsCount descending
            select new {
               ProjectsCount = projectsCount,
               Name = e.name
            };
注意:@crashmstr指出,最好使用类而不是结构。在C#中,我们使用Pascal Case作为类/结构属性和方法名称。

在C#中,应该默认为
class
,而不是
struct
(),在C#中,应该默认为
class
,而不是
struct
()