c#列表中重复项的频率
本文关键字:频率 列表 | 更新日期: 2023-09-27 18:03:12
我在VS Windows窗体应用程序,我不使用任何其他形式的编码(例如linq) -只是编码的基本风格,就像这样;
List<string> brandList = new List<string>();
//brand items are added to the list
//go through list
for(int i = 0; brandList.Count; i++)
{
if(brandList[i]== "BrandName1")
{
//count for that brandName
}
}
我想知道的是如何获得一个品牌在列表中出现的次数?
这段代码也不需要区分大小写,因为它是从文件中读取的。
如果你不想/不能使用LINQ,你可以使用Dictionary<string, int>
:
Dictionary<string, int> dict = new Dictionary<string, int>();
for(int i = 0; brandList.Count; i++)
{
string brand = brandList[i];
int count = 1;
if(dict.ContainsKey(brand))
count = dict[brand] + 1;
dict[brand] = count;
}
现在你有所有的品牌作为关键和他们的价值。
我真的没有看到问题,因为你的代码已经有解决方案,如果我理解正确的问题。遍历元素,如果当前元素是要计数的元素,则增加一个变量。
const string BRAND = "BrandName1";
int count = 0;
foreach (string brand in brandList)
{
if (string.Compare(brand, BRAND, true))
{
count++;
}
}
显然,您可以使用for (int i = 0; i < brandList.Count; i++)
和brandList[i]
而不是foreach
,但它更像c#。
这个怎么样:
List<string> brandList = new List<string>();
//brand items are added to the list
//sort list to get number of occurences of each entry
brandList.Sort();
var occurences = new List<KeyValuePair<string, int>>();
//go through list
var numBrand = 1;
for (int i = 0; i < brandList.Count-1; i++)
{
if (string.Equals(brandList[i + 1], brandList[i]))
{
numBrand++;
}
else
{
occurences.Add(new KeyValuePair<string, int>(brandList[i], numBrand));
numBrand = 1;
}
}
var highestCount = occurences.OrderBy(o => o.Value).ToList()[0].Key;
如果最后一项是单次出现,它可能会跳过,但它不是最高的。这对你有用吗?