Linq查询以删除值为>;的第一个条目;字典中的0,当所有后续值都为零时

Linq查询以删除值为>;的第一个条目;字典中的0,当所有后续值都为零时,linq,dictionary,Linq,Dictionary,这是字典 Dictionary<string, uint> oSomeDictionary = new Dictionary<string, uint>(); oSomeDictionary.Add("Interface1",3); oSomeDictionary.Add("Interface2",0); oSomeDictionary.Add("Interface3",0); oSomeDictionary.Add("Interface4",0); oSomeDict

这是字典

Dictionary<string, uint> oSomeDictionary = new Dictionary<string, uint>();

oSomeDictionary.Add("Interface1",3);
oSomeDictionary.Add("Interface2",0);
oSomeDictionary.Add("Interface3",0);
oSomeDictionary.Add("Interface4",0);
oSomeDictionary.Add("Interface5",0);
oSomeDictionary.Add("Interface6",0);
oSomeDictionary.Add("Interface7",0);
Dictionary-oSomeDictionary=newdictionary();
添加(“接口1”,3);
添加(“接口2”,0);
添加(“接口3”,0);
添加(“接口4”,0);
添加(“接口5”,0);
添加(“接口6”,0);
添加(“接口7”,0);

条件:当
oSomeDictionary
中的第一个键的值大于0且后续值为零时(如上所述),请删除第一个键,否则不执行任何操作。

请参阅LINQ,然后使用密码stmt。如果deleteOrNot为true,则可以删除第一项。无法在LINQ中执行删除操作。:)

Dictionary-oSomeDictionary=newdictionary();
添加(“接口1”,3);
添加(“接口2”,0);
添加(“接口3”,0);
添加(“接口4”,0);
添加(“接口5”,0);
添加(“接口6”,0);
添加(“接口7”,0);
bool deleteOrNot=((来自oSomeDictionary中的test1)
其中test1.Value>0
选择test1.Count()==1)和&(oSomeDictionary.First().Value>0);

有一个简单的代码可以满足您的需要,但您应该按照注释中的说明先订购词典。请仔细使用此代码

Dictionary<string, uint> oSomeDictionary = new Dictionary<string, uint>();
oSomeDictionary.Add("Interface1", 3);
oSomeDictionary.Add("Interface2", 0);
oSomeDictionary.Add("Interface3", 0);
oSomeDictionary.Add("Interface4", 0);
oSomeDictionary.Add("Interface5", 0);
oSomeDictionary.Add("Interface6", 0);
oSomeDictionary.Add("Interface7", 0);

var ordered = oSomeDictionary.OrderBy(_ => _.Key);
if (ordered.First().Value > 0 && ordered.Skip(1).All(_ => _.Value == 0))
{
    oSomeDictionary.Remove(ordered.First().Key);
}
Dictionary-oSomeDictionary=newdictionary();
添加(“接口1”,3);
添加(“接口2”,0);
添加(“接口3”,0);
添加(“接口4”,0);
添加(“接口5”,0);
添加(“接口6”,0);
添加(“接口7”,0);
var ordered=oSomeDictionary.OrderBy(=>\ux.Key);
if(ordered.First().Value>0&&ordered.Skip(1).All(\u=>\ u0.Value==0))
{
oSomeDictionary.Remove(ordered.First().Key);
}

逻辑字典中没有“第一个”键这样的概念——它是无序的。(有“您碰巧检索到的第一个条目”,但如果您添加或删除元素,这可能会发生变化。)同样,也没有“后续”值这样的概念。如果需要插入排序,则需要类似于
List
的内容。请提供更多的上下文。“查询”一词的意思是“提出问题”,而不是“执行操作”。LINQ查询可以在字典中查找并告诉您它找到的第一个条目,但它不能删除任何内容。字典与上面一样是静态的,没有添加或删除操作。每次创建字典时,键的顺序也是相同的。从您的答案中获得线索并相应地修改。
Dictionary<string, uint> oSomeDictionary = new Dictionary<string, uint>();
oSomeDictionary.Add("Interface1", 3);
oSomeDictionary.Add("Interface2", 0);
oSomeDictionary.Add("Interface3", 0);
oSomeDictionary.Add("Interface4", 0);
oSomeDictionary.Add("Interface5", 0);
oSomeDictionary.Add("Interface6", 0);
oSomeDictionary.Add("Interface7", 0);

var ordered = oSomeDictionary.OrderBy(_ => _.Key);
if (ordered.First().Value > 0 && ordered.Skip(1).All(_ => _.Value == 0))
{
    oSomeDictionary.Remove(ordered.First().Key);
}