Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C中的LINQ按位数对整数进行分组#_C#_Linq - Fatal编程技术网

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

C# 如何使用C中的LINQ按位数对整数进行分组#,c#,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,

基本上,我有一些整数,比如说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();

那么,到目前为止,您尝试了什么,为什么对您不起作用呢?一条已被删除的评论指出,此解决方案将以负数“失败”。好吧,它不会“失败”,但它确实会提供一个不正确的结果。OP规定数字的范围在“0-100”之间……因此没有负数。但是,一个简单的更改也允许负数::
Math.Abs(c).ToString().Length
@Barns是的,这是一个很好的捕获,我正在更新我的解决方案。谢谢!非常感谢,我也不知道如何输出这些数字。有什么建议吗?@Frontmaniaac只需更新我的答案,很乐意帮助