将一个数组中的数字频率写入另一个数组
本文关键字:数组 频率 数字 另一个 一个 | 更新日期: 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;