如何拆分字符串并根据匹配值获取总和

时间:2017-08-04 06:50:54

标签: c# .net

需要一些帮助。我生成了一个字符串列表来帮助收集一些信息。我需要重新拆分列表以根据匹配的名称添加值。我的字符串列表如下(包括中间栏):

  • 红色| 5
  • 红色| 3
  • 蓝色| 2
  • 红色| 6
  • 绿色| 1

结果应为:红色= 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);
    }
}

1 个答案:

答案 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"];