在分割值后识别c#列表中不同的项

本文关键字:列表 分割 识别 | 更新日期: 2023-09-27 17:50:51

我使用的是c#。NET 4.0)。我有一个

class Employee
{
    public string Location { get; set; }
    public int ID { get; set; }
    public string FilterType { get; set; }
    public Employee(string name, int id, string fType)
    {
        Location = name;
        ID = id;
        FilterType = fType;
    }
}

List<Employee> empList = new List<Employee>();
Employee e = new Employee("[IND].[MH].&1", 1, "="); empList.Add(e);
e = new Employee("[SNG].[Tampines].&1", 7, "="); empList.Add(e);
e = new Employee("[IND].[MP].&2", 5, "="); empList.Add(e);
e = new Employee("[USA].[NYC].&2", 9, "="); empList.Add(e);
e = new Employee("[IND].[MH].&3", 3, "="); empList.Add(e);
e = new Employee("[IND].[MP].&1", 4, "="); empList.Add(e); 
e = new Employee("[SNG].[Bedok].&1", 6, "="); empList.Add(e);
e = new Employee("[USA].[NYC].&1", 8, "="); empList.Add(e);
e = new Employee("[IND].[MH].&2", 2, "="); empList.Add(e);

我想做什么:

  1. 将empList中的name属性拆分为'.&'
  2. 这将返回一个包含2项的数组。我将把数组[0]添加到字典中。
  3. 这将创建唯一项目列表(我们称之为unique list)
  4. 然后对于唯一列表中的每个项目,我将循环遍历empList中的每个项目并将名称合并为

如果唯一列表中的项目是'[USA]。[NYC]',循环遍历empList后,输出应该是{[USA].[NYC].&1, [USA].[NYC].&2}。如果唯一列表中的项目是'[SNG]。[Tampines]' put应该是'{[SNG].[Tampines].&1}'

我可以通过这样做来实现

在empList上运行循环-将名称分割为'.&'并将结果添加到字典中,以确保只添加唯一的项

然后在unique list上运行一个循环-在这个循环中在empList上运行另一个循环,检查empList中的当前项是否包含uniqueList中的项并进行字符串操作。

我想知道是否有更聪明的方法来做到这一点。

谢谢

在分割值后识别c#列表中不同的项

是的,有一个更简单的方法。您可以通过以下功能使用LINQ组:

    var grouped = from emp in empList
                  group emp by emp.Location.Split('&')[0] into g
                  select new {LocCode = g.Key, Emps = g};
    foreach (var group in grouped) {
        // group.LocCode contains, e.g., [USA].[NYC].,
        // group.Emps contains all employees at this location
    }