【发布时间】:2014-03-19 16:51:59
【问题描述】:
我正在使用 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 个项目的数组。我将 array[0] 添加到字典中。
- 这将创建唯一项目列表(我们称之为唯一列表)
- 然后对于唯一列表中的每个项目,我将遍历 empList 中的每个项目,并像这样组合名称
如果唯一列表中的项目是 '[USA].[NYC]',则在遍历 empList 后,输出应为 {[USA].[NYC].&1, [USA].[NYC].&2 }。如果唯一列表中的项目是 '[SNG].[Tampines]',则 putput 应该是 '{[SNG].[Tampines].&1}'
我可以通过这样做来实现这一点
在 empList 上运行循环 - 用 '.&' 拆分名称并将结果添加到字典中以确保仅添加唯一项
然后在唯一列表上运行一个循环 - 在此循环内对 empList 运行另一个循环并检查 empList 中的当前项目是否包含 uniqueList 的项目并进行字符串操作。
我想知道是否有更聪明的方法来实现这一点。
谢谢
【问题讨论】:
-
您方式过于关注机制。描述你正在努力实现的目标会更有成效,因为无论那是什么,听起来绝对不是这样做的方法。首先,为什么
Location是一个哑字符串? -
@Jon:感谢您的评论。我提供这么多细节的唯一原因是因为通常人们会问,你尝试过什么?为什么 loaction 是哑字符串 - 这是存储数据的多维数据集 (SSAS) 格式。我需要操作键来形成查询。
-
TL;DR:在更高的抽象级别描述您的目标。善意的荣誉,但“机制”和“细节”不是一回事。 “我想按所有者对小部件进行分组并找到拥有最多的所有者”是细节。 “我想拆分 .& 并将 [X].[Y] 转换为 {[X].[Y]&1....}”是机制。实际上,这听起来不像你想 split 本身。你想做别的事情并且你认为分裂是实现它的方法,但从这一点来看你可能是错的。见what is the XY problem?
-
@Jon:“XY 问题”是有道理的。收到消息:)
标签: c# list loops optimization .net-4.0