问题描述
我可能全都在想这一切,但我迷路了。我是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