在分割值后识别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);
我想做什么:
- 将empList中的name属性拆分为'.&'
- 这将返回一个包含2项的数组。我将把数组[0]添加到字典中。
- 这将创建唯一项目列表(我们称之为unique list)
- 然后对于唯一列表中的每个项目,我将循环遍历empList中的每个项目并将名称合并为
如果唯一列表中的项目是'[USA]。[NYC]',循环遍历empList后,输出应该是{[USA].[NYC].&1, [USA].[NYC].&2}。如果唯一列表中的项目是'[SNG]。[Tampines]' put应该是'{[SNG].[Tampines].&1}'
我可以通过这样做来实现
在empList上运行循环-将名称分割为'.&'并将结果添加到字典中,以确保只添加唯一的项
然后在unique list上运行一个循环-在这个循环中在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
}