c#如何对嵌套集合进行排序

问题描述

我可能全都在想这一切,但我迷路了。我是C#的新手,不知道什么是解决此问题的最佳方法

string[] input = new string { "FR_Paris","UK_London","UK_Bristol" };

控制台中理想的输出是根据一个国家/地区中出现的城市来排序的,并且城市按字母顺序排序。

在这种情况下是:

  • 英国2x布里斯托尔,伦敦
  • FR 1x巴黎

我不会说谎,这是我的作业。我知道如何解析输入,我认为对于城市,必须使用可以排序但不知道哪种类型的集合。对于嵌套集合,我有点迷失。

请至少给我一个方向。

非常感谢!

解决方法

尝试一下

// Init Array
string[] input = new string[] { "FR_Paris","UK_London","UK_Bristol" };

//Get All Codes
List<string> Codes = new List<string>();
foreach (var CityName in input)
{
   var Name = CityName.Split('_')[0]; // Get Name After _ Paris
   if (!Codes.Contains(Name))
      Codes.Add(va);
}

// Print
foreach (var Code in Codes.OrderBy(x => x))
{
   var AllNames = input.Where(x => x.StartsWith(Code + "_")).Select(x => x.Split('_')[1]);

   Console.WriteLine(Code + " " + xd.Count() + "x " + string.Join(",",AllNames.OrderBy(x => x)));
}
,

您可以尝试使用linq

var input = new List<string> { "FR_Paris","UK_Bristol" };

var result = input.Select(x => new { Country = x.Split("_")[0],City = x.Split("_")[1] })
                  .GroupBy(x => x.Country)
                  .Select(x => $"{x.Key} {x.Count()}x {String.Join(",x.OrderBy(x => x.City).Select(x => x.City))} ");
foreach (var item in result)
{
    Console.WriteLine(item);
}

输出

FR 1x Paris
UK 2x Bristol,London
,

使用LINQ:

var grouped = input
    .Select(x => x.Split('_')) // Split all strings into array[2]
    .GroupBy(x => x[0]) // Group by country
    .OrderByDecending(x => x.Count()); // Order by number of cities