gpt4 book ai didi

c# - 优化 C# 代码以计算嵌套循环中的出现次数

转载 作者:行者123 更新时间:2023-11-30 14:44:43 26 4
gpt4 key购买 nike

我想优化此代码以计算字符串列表中的出现次数。具体来说,我有两个列表

1) cat:一个包含重复项的巨大字符串列表(重复项必须存在)。

2) cat_unq:与 cat 不同的元素。

我目前在我的代码中所做的是循环 cat_unq 中的所有唯一元素,并计算唯一元素在重复项列表中存在的次数。搜索在移动设备上运行。

我已经尝试过从列表切换到数组,但性能稍好但不够。

另一种尝试是使用 foreach parallel 进行并行搜索,但性能不稳定。

这是我目前使用的代码:

private List<int> GetCategoryCount(List<string> cat, List<string> cat_unq)
{
List<int> cat_count = new List<int>();
for (int i = 0; i < cat_unq.Count; i++)
cat_count.Add(cat.Where(x => x.Equals(cat_unq[i])).Count());
return cat_count;
}

最佳答案

它很慢,因为您要在整个 cat 数组中搜索每个唯一的名称。 (cat.Where(....).Count()).

相反,将您的猫列表与重复项分组,并使其成为字典。然后您可以快速找到每个唯一名称的编号。

private List<int> GetCategoryCount(List<string> cat, List<string> cat_unq)
{
var catsDict = cat.GroupBy(x => x).ToDictionary(k => k.Key, v => v.Count());
return cat_unq.Select(c => catsDict[c]).ToList();
}

请注意,如果您在其他地方形成唯一的猫名列表毫无意义,您可以在上面一起完成(字典以唯一的猫名作为键)

// No need for a separate list of unique names
private List<int> GetCategoryCount(List<string> cat)
{
return cat.GroupBy(x => x).Select(g => g.Count()).ToList();
}

或者您实际上想要的是所有唯一名称​​和计数的列表

// No need for a separate list of unique names - as this one returns it with the counts in a dictionary
private Dictionary<string,int> GetCategoryCount(List<string> cat)
{
return cat.GroupBy(x => x).ToDictionary((k => k.Key, v => v.Count());
}

关于c# - 优化 C# 代码以计算嵌套循环中的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57922513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com