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
}
}

我想知道的是如何获得一个品牌在列表中出现的次数?

这段代码也不需要区分大小写,因为它是从文件中读取的。

c#列表中重复项的频率

如果你不想/不能使用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;

如果最后一项是单次出现,它可能会跳过,但它不是最高的。这对你有用吗?