拆分值后在C#列表中标识不同的项

拆分值后在C#列表中标识不同的项,c#,list,loops,optimization,.net-4.0,C#,List,Loops,Optimization,.net 4.0,我正在使用C#(.NET4.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;

我正在使用C#(.NET4.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);
class员工
{
公共字符串位置{get;set;}
公共int ID{get;set;}
公共字符串筛选器类型{get;set;}
公共雇员(字符串名称、int-id、字符串fType)
{
位置=名称;
ID=ID;
FilterType=fType;
}
}
List empList=新列表();
员工e=新员工(“[IND].[MH].&1”,1,”=”;添加(e);
e=新员工(“[SNG].[Tampines].&1”,7“=”);添加(e);
e=新员工(“[IND].[MP].&2”,5,”=”;添加(e);
e=新员工(“[USA].[NYC].&2”,9“=”);添加(e);
e=新员工(“[IND].[MH].&3”,3,”=”;添加(e);
e=新员工(“[IND].[MP].&1”,4,”=”;添加(e);
e=新员工(“[SNG].[Bedok].&1”,6“=”;添加(e);
e=新员工(“[USA].[NYC].&1”,8“=”);添加(e);
e=新员工(“[IND].[MH].&2”,2,”=”;添加(e);
我想做的是:

  • 将empList中的“name”属性按“.&”拆分
  • 这将返回一个包含2项的数组。我将把数组[0]添加到字典中
  • 这将创建唯一项目的列表(我们称之为唯一列表)
  • 然后,对于唯一列表中的每个项目,我将循环empList中的每个项目,并像这样组合名称
  • 如果唯一列表中的项为“[USA].[NYC]”,则在遍历empList后,输出应为{[USA].[NYC].&1[USA].[NYC].&2}。如果唯一列表中的项为“[SNG].[Tampines]”,则输出应为“{[SNG].[Tampines].&1}”

    我可以通过这样做来实现这一点

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

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

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


    谢谢

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

    你太专注于力学了。描述你正在努力实现的目标会更有成效,因为不管是什么,听起来肯定不是这样做的。首先,为什么
    Location
    是一个哑字符串?@Jon:谢谢你的评论。我给出这么多细节的唯一原因是人们通常会问,你试过什么?为什么loaction是哑字符串-这是存储多维数据集(SSAS)数据的格式。我需要操纵键来形成query.TL;DR:从更高的抽象层次描述你的目标。良好的意图值得称赞,但“机制”和“细节”不是一回事。“我想按所有者对小部件进行分组,并找到拥有最多的所有者”是详细信息。“我想在……上拆分,&并将[X].[Y]转换为{[X].[Y]&1..}”是一种机制。实际上,听起来你并不想分裂自己。你想做其他的事情,你认为分裂是一种方式,但在这方面你可能是错的。见@Jon:“XY问题”有道理。收到的信息:)