C#在数组中找出现次数最多的一个数

时间:2024-03-29 18:39:24

思路

我的想法是先把数组变得有序,按照从小到大的顺序排列,得到有序的数组后再去对数组进行内部数据进行次数分析C#在数组中找出现次数最多的一个数
通过相邻两数据的对比可以知道哪个数的频率最高,如果出现两个(或三或四等等)数的频率一样高,那我这种方法只会取最前面的一组数据,比如{1,2,2,3,3,5,5,9},取到的数据是2.但因为我得到的数据是有六位的浮点数float类型,比如1.78569这种类型的。

 private float[] allHeightData=new float[100];  //zy:创建一个数组,用于存放一定量的身高数据

 /// <summary>
    /// zy:将数组里面出现次数最频繁的值取出来
    /// </summary>
    /// <param name="f"></param>
    void MaxCountHeightData(float[] f,out float height)
    {
        //冒泡一遍,使数组从小到大排序
        for (int j = 0; j < f.Length - 1; j++)
        {
            for (int i = 0; i < f.Length - 1 - j; i++)
            {
                if (f[i] > f[i + 1])
                {
                    float temp = f[i];
                    f[i] = f[i+1];
                    f[i+1] = temp;
                }
            }
        }
        //排序完成,数组已经按由小到大顺序排列
        //foreach (int number in f)
        //{
        //    Debug.Log(number);
        //}

        //选择频繁数,不考虑频繁数频率相同的情况
        int count = 1, max = 1;  //当前次数和最大次数
        float num = f[0];        //数组中最大的值
        for (int i=1; i < f.Length; ++i)
        {
            if (f[i] == f[i - 1])
                count++;
            else
                count = 1;
            if (max < count)
            {
                max = count;
                num = f[i];
            }
        }
        print(num + ":" + max);
        height = num;
    }

传递进去的数组我取了小数后两位

allHeightData[count] = float.Parse(userData.ToString("#0.00")); ;   //zy

这种方法可以把第一组频率最高的数据抓取出来