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

时间:2013-06-06 14:23:18

标签: c# arrays

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

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

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

像这样:

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

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

6 个答案:

答案 0 :(得分:12)

GroupBy使这非常简单。

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

答案 1 :(得分:2)

您可能会发现有两个数组很有用,每次生成一个随机数时,您可以将第一个数组的下一个元素设置为数字,并将第二个数组的随机numberth元素设置为自身+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;
}

这样的事情可能会起作用:)

答案 2 :(得分:2)

我认为你正在寻找这样的东西:

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的出现次数等...

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

对我而言,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;

答案 5 :(得分:2)

你应该可以这样做:

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;