计算列表的每个不同值的出现次数

时间:2013-11-19 10:56:30

标签: c#

好的,所以我基本上创建了一些算法来分解数字,并将所述因子存储在一个列表中。

因此,对于像24这样的数字,因子列表将如下所示:

  

l = {2,2,2,3}

由于我正在使用非常大的数字,我需要一种方法来有效地查找列表中每个不同值出现的次数。 在这个基本的例子中,2次发生3次,3次发生1次。

是否有C#列表<>能为我做到这一点的功能?

2 个答案:

答案 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);