将一个数组中的数字频率写入另一个数组

本文关键字:数组 频率 数字 另一个 一个 | 更新日期: 2023-09-27 18:17:09

我正在写一个统计的小应用程序。这个应用程序的一个功能是确定Array中随机生成的数字的频率,其中包含100个元素。

到目前为止,我设法生成了一个二维Array,我用数字0-100填充(这些是其他Array中随机生成的数字的最大值和最小值)。

我想用基于索引的频率来填充这个数组。

:

//Array for random numbers
int[] randomNumbers = new int[10] {2, 3, 4, 5, 5, 2, 8, 9, 3, 7};
//Two-dimensional array for holding frequency of each unique number
int[,] frequency = new int[2,101];
for (int i = 0; i <= 100; i++)
{
    frequency[0, i] = i;
}

频率阵列生成得很好。但我不知道该怎么办。如何将每个唯一数字的频率添加到数组中?我试过了:

for (int i = 0; i < randomNumbers.Length; i++)
{
    frequency[1, i] = frequency[1, i] + 1;
} 

但是它只是连续地用1填充频率数组。

将一个数组中的数字频率写入另一个数组

GroupBy使这非常简单。

var frequencies = randomNumbers.GroupBy(n => n)
    .Select(group => new 
             {
                Number = group.Key, 
                Frequency = group.Count() 
             });

您可能会发现有两个数组很有用,每次生成随机数时,将第一个数组的下一个元素设置为该数字,并将第二个数组的随机数元素设置为其本身+1。这将为您提供从开始(从随机数生成器的POV)开始的统计信息。

int[] vals, stats;
vals = new int[100]
stats = new int[100]
for (int i = 0; i < 100; i++)
{
    vals[i] = getRandom();
    stats[vals[i]] = stats[vals[i]] + 1;
}

像这样的东西可能会奏效:)

我会这样做,你有索引频率表的数值和实际值是频率(就像那样,不完全):

for (int i = 0; i <= 100; i++)
{
    frequency[i] = randomNumbers.SelectMany( o=>o.ArrayProperty==i ).Count() ;
}

对我来说,看起来Dictionary<int, int>是最适合您的需求的:

Dictionary<int, int> frequency = new Dictionary<int, int>();
foreach (int number in randomNumbers)
{
    if (frequency.ContainsKey(number))
        frequency[number]++;
    else
        frequency.Add(number, 1);
}
int numberOfGroups = frequency.Count;

我想你在找这样的东西:

int[] randomNumbers = ...;
int[] frequency = new int[101];
for (int i = 0, l = randomNumbers.Length; i < l; ++i)
    ++frequency[randomNumbers[i]];

这样做的结果是frequency数组包含每个索引的出现次数。换句话说,frequency[0]将包含值0的出现次数,frequency[1]将包含值1的出现次数,等等…

您应该能够这样做:

int[] randomNumbers = new int[10] {2, 3, 4, 5, 5, 2, 8, 9, 3, 7};
Dictionary<int, int> dictionary = new Dictionary<int,int>();
foreach(int randomNumber in randomNumbers)
{
    if (!dictionary.ContainsKey(randomNumber))
        dictionary.Add(randomNumber, 1);
    else
        dictionary[randomNumber]++;
}

如果你想对它们排序,使用Linq…

var sortedList = from pair in dictionary
    orderby pair.Key
    select pair;