如何在c#中对字符串数组从最大到最小的类型元素进行排序

本文关键字:类型 元素 排序 字符串 数组 | 更新日期: 2023-09-27 18:08:29

我很抱歉混淆标题,我如何使这些元素的数组:

string [] anArray = new string[50];
anArray[0] = "New York";
anArray[1] = "London";
anArray[2] = "New York";
anArray[3] = "London";
anArray[4] = "New York";
anArray[5] = "Chicago";

落入如下数组:

anArray[0] = "New York";
anArray[1] = "New York";
anArray[2] = "New York";
anArray[3] = "London";
anArray[4] = "London";
anArray[5] = "Chicago";

按数组中相等元素的个数排序。例如,如果anArray有等量的元素,如

anArray[0] = "New York";
anArray[1] = "New York";
anArray[2] = "London";
anArray[3] = "London";

如何使程序找到这两个元素并输出如下内容:纽约,元素数量2伦敦,元素数量2

我希望你能理解,如果这可能使你感到困惑,很抱歉,谢谢你的帮助。

如何在c#中对字符串数组从最大到最小的类型元素进行排序

使用Linq GroupBy

        string[] anArray = new string[50];
        anArray[0] = "New York";
        anArray[1] = "London";
        anArray[2] = "New York";
        anArray[3] = "London";
        anArray[4] = "New York";
        anArray[5] = "Chicago";
        var GroupedArray = anArray.GroupBy(a => a);
        foreach (var item in GroupedArray)
        {
            Console.WriteLine(item.Key + " -> " + item.Count());
        }
        Console.Read();
        //NewYork -> 3
        //London -> 2
        //Chicago -> 1

附带说明,您将数组初始化为容纳50个项目,在我的示例中,这将导致44个空字符串项目被groupby子句考虑在内。如果您想避免显示这些,请替换下面的groupby行:

var GroupedArray = anArray.GroupBy(a => a).Where(a => !string.IsNullOrEmpty(a.Key));

也许不是最快的解决方案,但这是您所追求的逻辑。

var result = anArray.OrderByDescending(o => anArray.Count(c => c == o));

请注意,您使用的是一个大小为50的数组,因此根据顺序,前44项将是null

可以按每个元素的个数排序

var orderedItems = anArray.OrderByDescending(x => x?.Count()).ToArray();

或者你可以通过每个字符串的长度来计算

var orderedItems = anArray.OrderByDescending(x => x?.Length).ToArray();

如果数组元素为null并且返回一个有序数组,则检查并返回null。