簡體   English   中英

如何在C#中從最大數量到最小數量的這種類型的元素對字符串數組進行排序?

[英]How to sort a string array from maximum to minimum amount of that type of elements in c#?

對不起,標題令人困惑,我該如何排列這些元素:

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

希望您能理解,如果可能造成混淆,對不起,謝謝您的幫助。

也許不是最快的解決方案,但這是您所追求的邏輯。

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

請注意,您使用的數組大小為50,因此由於orderby,前44個項目將為null

您可以按每個元素的數量排序

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

或者您可以按每個字符串的長度來執行

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

如果array元素為null,則檢查並返回null,並返回有序數組。

只需使用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個項目,在我的示例中,groupby子句將考慮到44個空字符串項目。 如果要避免顯示這些內容,請替換此行的groupby行:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM