获取字典的上一个元素
本文关键字:元素 上一个 字典 获取 | 更新日期: 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
}
}
像这样的东西?