由于某些原因我有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
,我想根据他们的名字对它们进行分组。
有没有人有聪明的建议?
答案 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
}
}
这样的东西?