如何在C#中使用LINQ按位数对int进行分组

  • 本文关键字:int LINQ c# linq
  • 更新时间 :
  • 英文 :


基本上,我有很多整数,比如说0-100范围内的20个整数,我想按位数(1位数、2位数和3位数(对它们进行分组。它应该以升序适用于组以及这些组中的数字。

int[] numbers = new int[] { 100, 5, 88, 6, 45, 12, 34, 11, 6, 17, 35, 55, 54, 34, 7, 12, 33, 2, 41, 5 };

您可以通过将它们转换为字符串来获得它们的长度,然后将它们分组为

int[] numbers = new int[] { 100, 5, 88, 6, 45, 12, 34, 11, 6, 17, 35, 55, 54, 34, 7, 12, 33, 2, 41, 5 };
var ndigitsList = numbers.GroupBy(c => c.ToString().Length)
.Select(c => c.ToList().OrderBy(num => num))
.ToList();
ndigitsList .ForEach(numslist =>
{
Console.WriteLine(numslist.First().ToString().Length + ":");
numslist.ToList().ForEach(num =>
{
Console.WriteLine(num);
});
Console.WriteLine("----------------------------------");
});
//output
//3 : 100
//1 : 2 5 5 6 7 ...
//2 : 11 12 12 17 ...

如果你有负值,那么你必须使用绝对值。

var ndigitsList = numbers.GroupBy(c => Math.Abs(c).ToString().Length)
.Select(c => c.ToList().OrderBy(num => num)).ToList();

最新更新