C# 将Long转换为整数Nums数组

C# 将Long转换为整数Nums数组,c#,arrays,types,long-integer,C#,Arrays,Types,Long Integer,我如何转换长字符,例如: 1234567898123456789 进入: [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9] 我问这个问题是因为我需要一种方法来迭代C夏普中的Long,但是Long显然不使用[]来表示数组,所以我似乎无法访问每个数字。这是非常粗糙的,但是你可以将Long转换成字符串,然后将其分解成单个数字,然后再将它们转换回像这样的整数 var digits = 123456789123456789L.ToString().Select(d => i

我如何转换长字符,例如:

1234567898123456789

进入:

[1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]


我问这个问题是因为我需要一种方法来迭代C夏普中的Long,但是Long显然不使用[]来表示数组,所以我似乎无法访问每个数字。

这是非常粗糙的,但是你可以将Long转换成字符串,然后将其分解成单个数字,然后再将它们转换回像这样的整数

var digits = 123456789123456789L.ToString().Select(d => int.Parse(d.ToString()));
要将数组转换回长数组,可以执行以下操作

var longFromDigits = digits.Aggregate(0L, (s, d) => s * 10 + d);

这是非常粗糙的,但是您可以将long转换为字符串,然后将其分解为单个数字,并将它们转换回如下所示的整数

var digits = 123456789123456789L.ToString().Select(d => int.Parse(d.ToString()));
要将数组转换回长数组,可以执行以下操作

var longFromDigits = digits.Aggregate(0L, (s, d) => s * 10 + d);

如果您不想使用字符串进行操作,可以借助模算术在数字上循环:

public static int[] Digits(long value) {
  if (value == 0)
    return new int[] { 0 };

  List<int> result = new List<int>();

  for (; value != 0; value /= 10)
    result.Add((int)Math.Abs(value % 10));

  result.Reverse();

  return result.ToArray();
}
编辑:您所要做的就是聚合数字以获得长背:


如果您不想使用字符串进行操作,可以借助模算术在数字上循环:

public static int[] Digits(long value) {
  if (value == 0)
    return new int[] { 0 };

  List<int> result = new List<int>();

  for (; value != 0; value /= 10)
    result.Add((int)Math.Abs(value % 10));

  result.Reverse();

  return result.ToArray();
}
编辑:您所要做的就是聚合数字以获得长背:


我怎样才能将它再次转换为Long?你的意思是从int数组转换为Long?应该是一种扩展方法,但实现非常简单decent@user769321:根据解决方案的精神,它可以是long result=long.Parsestring.Concatdigits;:在这里,我们将所有数字转换为字符串,然后将其解析为Long如何将其再次转换为Long?你的意思是从int数组转换为Long?应该是一种扩展方法,但实现非常简单decent@user769321:根据解决方案的精神,它可以是long result=long.Parsestring.Concatdigits;:在这里,我们把所有的数字压缩成字符串,然后把它解析为long,为什么这么混乱?为什么不在num时做呢!=0{result.Insert0,num%10;num=num/10;}@styx:在一般情况下,result.Insert0。。。这很费时:我们必须移动整个集合,而添加后再进行最终反转在大量数据上要快得多,当然不是在这里。这是我的习惯:更长的代码,但我确信它不会背叛我。对于Math.Abs也是一样,当value==0时是一个特例,为什么会如此混乱?为什么不在num时做呢!=0{result.Insert0,num%10;num=num/10;}@styx:在一般情况下,result.Insert0。。。这很费时:我们必须移动整个集合,而添加后再进行最终反转在大量数据上要快得多,当然不是在这里。这是我的习惯:更长的代码,但我确信它不会背叛我。同样适用于Math.Abs和value==0时的特殊情况