C# 将整型数组合并为单个整型数组

C# 将整型数组合并为单个整型数组,c#,int,C#,Int,我想将一个整数数组合并为一个整数值。因此,我有下面的代码将数组组合成一个值 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)); } int[]数组={5,6,2,4}; int=0; for(int i=0;i

我想将一个整数数组合并为一个整数值。因此,我有下面的代码将数组组合成一个值

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));
}
int[]数组={5,6,2,4};
int=0;
for(int i=0;i
该产量=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));
}
int[]数组={51,62,23,44};
int=0;
for(int i=0;i

按574774而不是51622344的标准生产联合收割机。如何更正此问题?

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

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);
        }
    }
}
请执行以下操作:

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

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

一旦你有了一个代表你的数字的字符串,你只需解析它就可以得到数字本身


当然,这是不安全的,根据您可能的输入,这可能会失败:
{1,4,-5,4}
。一些错误检测和
int.TryParse
可能是解决这个问题的最好方法,这个例子只是为了让大家明白这个想法。

Linq和一些简单的数学可以在这里提供帮助(没有字符串或math.Pow)。我还将用大小不等的数字(也就是说,不是所有的一位数或所有的两位数)来给它植入种子。首先是一些初步代码:

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

我得到ArrayResult=
1051792344
(即(使用&作为串联)1051&7&923&44)

尝试使用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);
       }
}

这将把数组中的数字转换成一个字符串,然后转换成一个数字。

将每个元素转换成一个字符串,连接字符串,然后将结果转换回
Int32
。为什么不将它们转换成字符串,然后连接?可能是@JayV的重复:不够接近。谢谢大家。我不知道为什么我没有想到这么简单的修复方法
@Eser是的,我经常使用
Join
,所以我总是使用它
Concat
可能更正确,这是一个坏习惯。在
catch
块中定义不同类型的结果不是最好的主意。@RobertHarvey-是的,但我不确定如何使用结束值。如果仅显示,则根本不需要解析,并且可以完全忽略整个try/catch。我想关于意图还有一些问题。