获取字典的上一个元素

本文关键字:元素 上一个 字典 获取 | 更新日期: 2023-09-27 18:20:25

由于几个原因,我有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,我想根据它们的名称对它们进行分组。

有人有明智的建议吗?

获取字典的上一个元素

我不认为你的代码会按照你的想法执行——不能保证字典中键值对的排序;它们可以按任何顺序排列,甚至可能在应用程序的不同运行中按不同顺序排列。

如果您需要按特定顺序对它们进行排序,则应使用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
}

这应该是非常直接的,

 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
                //
            }

你不能使用传统的循环吗?

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

像这样的东西?