需要一些帮助。我生成了一个字符串列表来帮助收集一些信息。我需要重新拆分列表以根据匹配的名称添加值。我的字符串列表如下(包括中间栏):
结果应为:红色= 14蓝色= 2绿色= 1
我的实际代码如下:
List<string> plist = new List<string>();
ObjectIdCollection mycoll = promptforObjColl("\nSelect Objects: ");
foreach (ObjectId pid in mycoll)
{
if (pid.GetType() == typeof(Polyline))
{
Polyline pcl = pid.GetObject(OpenMode.ForRead) as Polyline;
plist.Add(pcl.StyleName + "|" + pcl.Area);
}
}
答案 0 :(得分:3)
我认为你必须交叉检查你制作连接字符串的逻辑,然后遍历集合 - &gt;拆分它们以获得实际值 - &gt;处理它们进行分组和求和等是非常昂贵的,我更喜欢你使用字典而不是如下:
Dictionary<string,double> myDictionaryObj = new Dictionary<string,int>();
ObjectIdCollection mycoll = promptforObjColl("\nSelect Objects: ");
double currentValue;
foreach (ObjectId pid in mycoll)
{
if (pid.GetType() == typeof(Polyline))
{
polyline pcl = pid.GetObject(OpenMode.ForRead) as Polyline;
if(myDictionaryObj.TryGetValue(pcl.StyleName, out currentValue))
{
myDictionaryObj[pcl.StyleName]+= pcl.Area;
}
else
{
myDictionaryObj.Add(pcl.StyleName,pcl.Area);
}
}
}
这里我们保留一个字典来存储值,以便我们可以检查是否存在特定颜色,如果是,则表示添加值,或者将该项添加为新的字典条目。
请注意:我认为pcl.Area
的类型为Double,这就是选择Dictionary<string,double>
的原因。希望您不要忘记在需要时更改类型。
最后,您将通过访问字典中的键值来获得总和,如下所示:
double redSum = myDictionaryObj["Red"];