BuildingaDictionaryofItemCountsinaList我有一个列表,其中包含一堆可以出现多次的字符串。我想获取此列表并构建一个列表项字典作为键,并将它们的出现作为值。示例:Liststuff=newList();stuff.Add("花生酱");stuff.Add("果酱");stuff.Add("食物");stuff.Add("零食");stuff.Add("哲学");stuff.Add("花生酱");stuff.Add("果酱");stuff.Add("食物");结果将是一个字典,其中包含:“花生酱”,2个“果酱”,2个“食物”,2个“零食”,1个“哲学”,1我有办法做到这一点,但似乎我没有利用C#3.0中的优点publicDictionaryCountStuff(IListstuffList){DictionarystuffCount=newDictionary();foreach(stringstuffinstuffList){//初始化或增加此项的计数if(stuffCount.ContainsKey(stuff)){stuffCount[stuff]++;}else{stuffCount.Add(stuff,1);}}返回stuffCount;您可以使用C#中的组子句来执行此操作。列表内容=newList();...vargroups=fromsinstuffgroupsbysintogselectnew{Stuff=g.Key,Count=g.Count()};如果需要扩展方法,也可以直接调用:vargroups=stuff.GroupBy(s=>s).Select(s=>new{Stuff=s.Key,Count=s.Count()});从这里开始,将其放入字典中:vardictionary=groups.ToDictionary(g=>g.Stuff,g=>g.Count);我会创建一个专门的列表,由字典支持,添加方法将测试成员资格并增加计数(如果找到)。有点像:publicclassCountingList{DictionarycountingList=newDictionary();voidAdd(strings){if(countingList.ContainsKey(s))countingList[s]++;否则countingList.Add(s,1);一个想法是给字典一个默认值零,所以在特殊情况下你不会第一次出现。好吧,没有更好的方法来做到这一点。也许您可以编写一个LINQ查询来对字符串进行分组,然后计算每组中有多少个字符串,但这不会像您已有的那样高效。字典a=stuff.GroupBy(p=>p).OrderByDescending(r=>r.Count()).ToDictionary(q=>q.Key,q=>q.Count());您可以传递GroupBy,然后创建Dictionary来计算每个组。正如性能测试所示,除了Linq之外,通常还有更有效的方法来执行此操作。我认为您的代码更高效,Linq解决方案更具可读性和美观性。以上就是C#学习教程分享的全部内容:构建列表中项数的字典。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
