好的,所以我基本上创建了一些算法来分解数字,并将所述因子存储在一个列表中。
因此,对于像24这样的数字,因子列表将如下所示:
l = {2,2,2,3}
由于我正在使用非常大的数字,我需要一种方法来有效地查找列表中每个不同值出现的次数。 在这个基本的例子中,2次发生3次,3次发生1次。
是否有C#列表<>能为我做到这一点的功能?
答案 0 :(得分:6)
试试这个:
var counts = list.GroupBy(x => x).ToDictionary(g => g.Key, g => g.Count());
它将生成包含数字和计数的字典
答案 1 :(得分:1)
您可以使用GroupBy
和字典:
Dictionary<int, int> numGroups = l
.GroupBy(i => i)
.ToDictionary(g => g.Key, g => g.Count());
现在您可以使用此词典进行查找:
int number = 2;
int count = 0;
numGroups.TryGetValue(number, out count);
Console.Write("List contains {0} {1} times.", number, count);
但是,这需要在每个新数字上创建一个新词典,我认为这个效率不够高。因此,您应该重复使用相同的字典并添加/增加数字,例如以这种方式:
Dictionary<int, int> NumberLookup = new Dictionary<int, int>();
public void CalculcateNextFactor()
{
int nextNumber = // calculate the next number...
if (NumberLookup.ContainsKey(nextNumber))
NumberLookup[nextNumber]++;
else
NumberLookup.Add(nextNumber, 1);
}
如果您想要给定数字的计数,您可以像第一种方法一样使用TryGetValue
:
int count = 0;
NumberLookup.TryGetValue(number, out count);