用C#写一个方法对字符串里面的字符次数排序

avatar
作者
筋斗云
阅读量:2

namespace _7._17day01
{
    public struct MyStruct
    {
        public string _name;
        public int _count;
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            string str = "abcdacbdcbacbdacbcbacb";
            MyStruct[] myStruct = myStructs(str);
            foreach (var item in myStruct)
            {
                Console.WriteLine(item._name+"==="+item._count);
            }
        }

        public static MyStruct[] myStructs(string str)
        {
            int x = 0;
            MyStruct[] myStruct = new MyStruct[x];
            for (int i = 0; i < str.Length; i++)
            {
                bool b = true;

                for (int j = 0; j < x; j++)
                {
                    if (myStruct[j]._name.Equals(str[i].ToString()))
                    {
                        myStruct[j]._count++;
                        b = false;
                    }
                }
                if (b)
                {
                    x++;
                    Array.Resize(ref myStruct, x);
                    myStruct[x - 1]._name = str[i].ToString();
                    myStruct[x - 1]._count=1;
                }

            }

            for (int i = 0; i < myStruct.Length; i++)
            {
                for (int j = 0; j < myStruct.Length-1; j++)
                {
                    if (myStruct[j]._count > myStruct[j + 1]._count)
                    {
                        MyStruct m;
                        m= myStruct[j];
                        myStruct[j]=myStruct[j+1];
                        myStruct[j+1]=m;
                    }
                }
            }


            return myStruct;
        }
    }
}

可以将里面的冒泡排序改为

for (int i = 0; i < myStruct.Length; i++)
            {
                for (int j = 0; j < myStruct.Length-1; j++)
                {
                    if (myStruct[j]._count > myStruct[j + 1]._count)
                    {
                        MyStruct m;
                        m= myStruct[j];
                        myStruct[j]=myStruct[j+1];
                        myStruct[j+1]=m;
                    }
                }
            }

直接用            Array.Sort(myStruct,(x,y)=>x._count-y._count);替换掉 用sort方法排序

关于Array.Resize介绍

Array.Resize 是 C# 中的一个方法,它允许你改变数组的大小。这个方法定义在 System 命名空间下的 Array 类中。Array.Resize 并不是直接修改原始数组的大小,而是创建一个新的数组,并根据需要复制原始数组的内容到新数组中。

语法

public static T[] Resize<T>(ref T[] array, int newSize);

  • T[] 是数组的类型,T 是数组元素的类型参数。
  • ref T[] array 是原始数组的引用。
  • int newSize 是新数组的大小。

参数

  • array:要调整大小的数组。
  • newSize:数组的新大小。

返回值

Array.Resize 返回一个新的数组,其大小为 newSize。如果 newSize 大于原始数组的大小,新数组的额外部分将被初始化为类型的默认值。如果 newSize 小于原始数组的大小,新数组将只包含原始数组的前 newSize 个元素。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!