获取字典的上一个元素

时间:2012-01-17 03:01:21

标签: c# dictionary foreach iteration

由于某些原因我有Dictionary<string, string>并且我在foreach循环中检查它。我没办法(至少我找不到智能解决方案)用列表,数组或Dictionary<int, string>替换它。字典由服务器名称,包的状态(2个字符串)组成。

我正在尝试获取foreach循环中的前一个元素,以便将其与当前元素进行比较。

我的代码:

foreach (KeyValuePair <string,string> pair in packageDistribution) { 
     if (pair.Value == "package distribution complete") { 
          // print pair.Key + " - Installed"; 
     } else {
         // print pair.Key + " - " + pair.Value
     } 
     if (i%3==0) "OR" (i== packageDistribution.count) { 
       // print the values \n 
     } 
}

我需要将它们分组3比3以节省空间,但我的问题是我想打印到新行,即使当前元素与前一元素不同:

pair.Key.substring(0,4) != previousElement.substring(0,4)

我的服务器看起来像NLDN1234, NLDN1235, NSTM2345, NSTM9874,我想根据他们的名字对它们进行分组。

有没有人有聪明的建议?

3 个答案:

答案 0 :(得分:2)

我认为您的代码不符合您的想法 - 无法保证对字典中的键值对进行排序;它们可以按任何顺序排列,甚至可以在应用程序的不同运行中以不同的顺序排列。

如果您按特定顺序需要它们,则应使用OrderBy()对其进行明确排序,如果需要对它们进行分组,请使用GroupBy() ...

var groupsInOrder 
    = packageDistribution.GroupBy(p => p.Key.SubString(0,4))
        .OrderBy(g => g.Key);
foreach(var group in groupsInOrder)
{ 
    int index = 0;
    foreach(var pair in group)
    {
        // Handle item
        if (++index%3==0)
        {
            // New line
        }
    }
    // New line
}

答案 1 :(得分:0)

这应该是非常直接的,

 Dictionary<string, string> svrs = new Dictionary<string, string>();
            svrs.Add("NLDN1234", "ok");
            svrs.Add("NLDN1235", "ok");
            svrs.Add("NSTM2345", "ok");
            svrs.Add("NSTM9874", "ok");

            SortedDictionary<string, string> sortedSvrs = new SortedDictionary<string, string>(svrs);

            for (int i = 0; i < sortedSvrs.Keys.Count; i++)
            {
                var key = sortedSvrs.Keys.ElementAt(i);
                Console.WriteLine(key +" " + sortedSvrs[key]);
                // any extra operation
                //
            }

答案 2 :(得分:-3)

你不能用循环传统吗?

for(int i = 0; i < packageDistribution.Count; i++) {
    if(i != 0) {
        // check for packageDistribution at i against i-1
    }
}

这样的东西?