如何在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
我希望你能理解,如果这可能使你感到困惑,很抱歉,谢谢你的帮助。
使用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。