【问题标题】:Convert Long to Array of Integer Nums将 Long 转换为整数数组
【发布时间】:2021-02-01 09:07:48
【问题描述】:

我怎样才能转换一个long,例如:

123456789123456789

进入:

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

我问是因为我需要一种方法来遍历升 C 中的 Long,但 Long 显然不使用 [ ] 用于数组,所以我似乎无法访问每个数字。

【问题讨论】:

    标签: c# arrays types long-integer


    【解决方案1】:

    这很粗略,但你可以将 long 转换为字符串,然后将其分解为单个数字,然后将它们转换回像这样的整数

    var digits = 123456789123456789L.ToString().Select(d => int.Parse(d.ToString()));
    

    要将数组转换回长整数,您可以这样做

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

    【讨论】:

    • 我怎样才能把它重新变成一个 Long 呢?
    • 你的意思是从一个整数数组变成一个长整数?
    • 应该是扩展方法,但实现还算不错
    • @user769321:本着解决方案的精神,它可以是long result = long.Parse(string.Concat(digits));:这里我们将所有数字连接到string,然后我们将其解析为long
    【解决方案2】:

    如果您不想使用 strings 进行操作,您可以在模运算的帮助下循环数字:

    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();
    }
    

    然后

    int[] digits = Digits(123456789123456789L);
    

    编辑:您所要做的就是Aggregate digitslong 回复:

    int[] digits = new [] { 1, 2, 3};
    
    long result = digits.Aggregate(0L, (s, a) => s * 10 + a);
    

    【讨论】:

    • 为什么这么乱?为什么不直接做while (num != 0) { result.Insert(0, num % 10); num = num / 10; }
    • @styx:一般情况下(不在此处)result.Insert(0, ...) 耗时:我们必须移动整个集合,而 Add 后跟最终的 Reverse在大量数据上要快得多(当然不是在这里)。这是我的习惯:更长的代码,但我相信它不会背叛我。 Math.Abs 相同,value == 0 时的特殊情况
    猜你喜欢
    • 2017-10-03
    • 2010-12-31
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多