给定的是以下数组(每个块 [] 代表一个条目):
[A=1] [A=5] [S=3] [A=7] [C=3] [T=2] [F=9] [Z=4] [N] [C=3] [E=8]
[A=7] [N] [Z=6] [Q=1] [P=2] [Y=7] [S=3] [N]
我需要将其拆分为“N”(NObject)类型的对象,其中每个其他字符都表示该 NObject 对象的特定属性,直到下一次出现“N”。在第一次出现“N”之前,这些字符属于另一个对象(我们称之为 PObject)。因此,任务应完成以下任务:
- 将每个字符映射到 PObject 属性
- 当第一个'N'发生时,创建一个新的 NObject
- 将每个字符映射到该 NObject 的属性
- 如果出现另一个 N 字符,则创建一个新的 NObject
目前,在伪代码中,我的解决方案如下所示,我发现这远非理想。
PObject pobject = new PObject();
NObject nobject;
CollectionOfKeyValuePairs collection = MyArray.Split('=').MapKeysValues()
foreach(entry in collection) {
switch(entry.Key):
case A:
(nobject ?? (CommonBase) pobject).A += entry.Value; break;
case B:
(nobject ?? (CommonBase) pobject).B += entry.Value; break;
case C:
(nobject ?? (CommonBase) pobject).C += entry.Value; break;
case E:
pobject.E += entry.Value; break;
case F:
(nobject ?? (CommonBase) pobject).F += entry.Value; break;
case G:
(nobject ?? (CommonBase) pobject).G += entry.Value; break;
case H:
(nobject ?? (CommonBase) pobject).H += entry.Value; break;
...
...
...
case N:
nobject = new NObject();
....
....
}
}
这正是我想要的:
[pobject]
A = 23
B = 63
C = 23
...
[nobject]
A = 34
B = 82
C = 12
...
[nobject]
H = 236
K = 2
...
[nobject]
// N occurred in array, but no properties followed
但是有超过 30 个可能的属性标识符(这意味着 30 个开关条件)和一个仅基于 nobject 可能为 null 的属性分配的属性(并且每个“N”字符出现创建一个新的):代码非常难闻。但我不知道如何做到这一点,也许使用内置的集合函数、LINQ 或其他任何东西。