将int数组合并为单个int

问题描述 投票:0回答:4

我想将整数数组合成一个整数值。所以我有以下代码将数组合并为一个值。

int[] array = { 5, 6, 2, 4 };
int combine = 0;

for (int i = 0; i < array.Length; i++)
{
    combine += array[i] * Convert.ToInt32(Math.Pow(10, array.Length-i-1));
}

这个产量组合= 5624.这是正确的。

我的问题是我的数组不是0-9的形式。所以我的阵列可能是{51,62,23,44}

int[] array = { 51, 62, 23, 44 };
int combine = 0;

for (int i = 0; i < array.Length; i++)
{
    combine += array[i] * Convert.ToInt32(Math.Pow(10, array.Length-i-1));
}

产量合并为574774,而不是51622344.如何更正?

c# int
4个回答
6
投票

请执行下列操作:

var number = int.Parse(string.Join("", array));

说明:

string.Join将采用T类型的任何枚举,在每个成员上调用ToString()并将它们连接到具有指定分隔符的单个字符串中。

一旦你有一个表示你的号码的字符串,你只需解析它就可以得到号码本身。

当然这不安全,取决于你可能的输入,这可能会失败:{1, 4, -5, 4 }。一些错误检测和int.TryParse可能是解决这个问题的最佳方法,这个例子只是为了解决这个问题。


4
投票

为什么不将它们转换为字符串然后连接?

using System;

public class Program
{
    public static void Main()
    {
        int[] intArray = { 5, 6, 2, 4 };
        var result = string.Concat(intArray);

        Console.WriteLine(result);

        try {
            int resultNumber = int.Parse(result);
        }
        catch(OverflowException) {
            // this can occur if you exceed the maximum value of an int
            long resultBigNumber = long.Parse(result);
        }
    }
}

0
投票

尝试使用StringBuilder,如下所示:

using System;
using System.Text;
public class Program {
       public static void Main(string[] args) {
             StringBuilder sb = new StringBuilder();
             int[] array = new Int[] { 51, 62, 23, 44 };
             int combine = 0;
             foreach(int single in array) {
                    string oneNum = single.ToString();
                    sb.Append(oneNum);
             }
             string final = sb.ToString();
             combine = Convert.ToInt32(final);
       }
}

这会将数组中的数字转换为字符串,然后将其转换为数字。


0
投票

Linq和一些简单的数学可以在这里帮助(没有字符串或Math.Pow)。我也将使用数量变化很大的数量(即,不是所有的单个数字或所有2位数字)播种它。首先是一些初步代码:

  private readonly int[] PowersOf10 = new [] {10, 100, 1000, 10000, 100000};
  private int DecimalShiftAccumulate(int numToShift, int numToAdd)
  {
      var nextPowerOf10 = PowersOf10.First(x => x > numToAdd);
      return (numToShift * nextPowerOf10) + numToAdd;
  }

您可以在PowersOf10阵列中包含更多数字;我厌倦了数零。

然后声明你的int数组并计算结果:

 var intArray = new[] { 1051, 7, 923, 44 };
 var arrayResult = intArray.Aggregate((a, b) => DecimalShiftAccumulate(a, b));

我得到arrayesult = 1051792344(即(使用&作为连接)1051&7&923&44)

© www.soinside.com 2019 - 2024. All rights reserved.