如何将整数数组转换为整数?

8
我希望学习如何在C#中将int数组转换为int。但是我想要将int与数组中的值连接起来。
例如:
int[] array = {5, 6, 2, 4};

将会被转换为一个等于5624的整数。

提前感谢任何帮助。


4
如果数组中的数字组成一个无法装入 int 的数,会发生什么? - Jon
2
那么不在0...9范围内的数组项怎么办? - Danny Varod
14个回答

18

只需将每个数字乘以其在数组中的位数上的10次方。

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

2
为了更快一点,Convert.ToInt32(Math.Pow(10, array.Length-i-1)) 可以改为调用自定义方法:int getIntRank(int rank){ int multiplier=1;for (int k=0; k<rank; k++) multiplier*=10; return multiplier;} - Yurii Hohan

8
int output = array
    .Select((t, i) => t * Convert.ToInt32(Math.Pow(10, array.Length - i - 1)))
    .Sum();

7
另一个简单的方法:
int[] array =  {5, 6, 2, 4};
int num;
if (Int32.TryParse(string.Join("", array), out num))
{
    //success - handle the number
}
else
{
    //failed - too many digits in the array
}

这里的技巧是将数组转换为数字字符串,然后将其解析为整数。


@nawfal 谢谢,我认为这个是最好的,我自己也点了赞。 :) - Shadow The Spring Wizard
我喜欢你的。如果效率不重要,这看起来最酷 https://dev59.com/2WHVa4cB1Zd3GeqPkCu3#9567257 - nawfal

3

如果您只想连接整数数组,请使用以下代码:

String a;
int output;
int[] array = {5, 6, 2, 4};
foreach(int test in array)
{
a+=test.toString();
}
output=int.parse(a);
//where output gives you desire out put

这不是精确的代码。


3
OP没有明确说明他需要时间敏感的代码,这是最易读的代码答案。 - ediblecode
即使如此,Shadow Wizard的答案更易读且更安全,但问题在于与其他解决方案相比,在速度方面并不是一个好的解决方案。 - Felix K.
1
请使用StringBuilder,我会满意的。可读性加1。 - f2lollpll

2
尝试以下步骤:
        int[] intArray = new int[] { 5, 4, 6, 1, 6, 8 };

        int total = 0;
        for (int i = 0; i < intArray.Length; i++)
        {
            int index = intArray.Length - i - 1;
            total += ((int)Math.Pow(10, index)) * intArray[i];
        }

它返回4265 - 这不是期望的结果。 - Michał Powaga

2
int result = 0;
int[] arr = { 1, 2, 3, 4};
int multipicator = 1;
for (int i = arr.Length - 1; i >= 0; i--)
{
   result += arr[i] * multipicator;
   multipicator *= 10;
}

1
使用 LINQ
long result =  array.Aggregate((result, x) => result * 10 + x);

最优雅的解决方案!为了避免编译错误,请使用: long result = array.Aggregate((aggregate, x) => aggregate * 10 + x); - Scott Howard

1
在C# 3.0及以上版本中:
array.Select((t, i) => t * Convert.ToInt32(Math.Pow(10, array.Length - i - 1))).Sum();

0
这样做就可以了:
public int DoConvert(int[] arr)
{

  int result = 0;

  for (int i=0;i<arr.Length;i++)
    result += arr[i] * Math.Pow(10, (arr.Length-1)-i);

  return result; 
}

0
var finalScore = int.Parse(array
    .Select(x => x.ToString())
    .Aggregate((prev, next) => prev + next));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接