分割值后,在C#列表中标识不同的项目

时间:2014-03-19 08:42:11

标签: c# list loops optimization .net-4.0

我正在使用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. 拆分&#39;名称&#39; empList中的属性由&#39;。&amp;&#39;
  2. 组成
  3. 这将返回包含2个项目的数组。我将array [0]添加到字典中。
  4. 这将创建唯一项目列表(让我们称之为唯一项目)
  5. 然后对于唯一列表中的每个项目,我将循环遍历empList中的每个项目,我将组合这样的名称
  6. 如果唯一列表中的项目是&#39; [USA]。[NYC]&#39;,在循环empList之后,输出应为{[USA]。[NYC]。&amp; 1,[ 。USA] [NYC]&安培; 2}。如果唯一列表中的项目是&#39; [SNG]。[Tampines]&#39;投入应该是&#39; {[SNG]。[Tampines]。&amp; 1}&#39;

    我可以通过做这样的事情来实现这个目标

    在empList上运行循环 - 将名称拆分为&#39;。&amp;&#39;并在字典中添加结果以确保只添加唯一项

    然后在唯一列表上运行循环 - 在此循环内运行empList上的另一个循环,并检查empList中的当前项是否包含uniqueList项并执行字符串操作。

    我想知道是否有更聪明的方法来实现这一目标。

    由于

1 个答案:

答案 0 :(得分:0)

是的,有一种更简单的方法。您可以按功能使用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
    }