我正在为统计编写一个小应用程序。此应用程序的一个功能是确定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;
}
但它只是连续填充频率数组。
答案 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;