我有这个数组,我写了一个函数MostFreq,它接受一个整数数组并返回2个值:该数组中的数字越频繁及其频率越多,请检查此代码,我认为您怎么看?有更好的方法吗?
static void Main() { int [] M={4,5,6,4,4,3,5,3}; int x; int f=MyMath.MostFreq(M,out x ); console.WriteLine("the most Frequent Item = {0} with frequency = {1}",x,f); }
=====
在Mymath课上
public static int MostFreq(int[] _M, out int x) { //First I need to sort the array in ascending order int Max_Freq, No_Freq, i, k; Array.Sort(_M); k = _M[0]; Max_Freq = 0; i = 0; x = 0; while (i < _M.Length) { //No_Freq= the frequency of the current number No_Freq = 0; //X here is the number which is appear in the array Frequently while (k == _M[i]) { No_Freq++; i++; if (i == _M.Length) break; } if (No_Freq > Max_Freq) { //so it will be printed the same Max_Freq = No_Freq; x = k; } if (i < _M.Length) k = _M[i]; } return (Max_Freq); }
LINQ起来。我知道这在VB中,但是您应该可以将其转换为C#:
Dim i = From Numbers In ints _ Group Numbers By Numbers Into Group _ Aggregate feq In Group Into Count() _ Select New With {.Number = Numbers, .Count = Count}
编辑:现在也用C#:
var i = from numbers in M group numbers by numbers into grouped select new { Number = grouped.Key, Freq = grouped.Count()};