将int数组合并为单个int
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将int数组合并为单个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));
}
这个产量组合= 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.如何更正?
答案
请执行下列操作:
var number = int.Parse(string.Join("", array));
说明:
string.Join
将采用T
类型的任何枚举,在每个成员上调用ToString()
并将它们连接到具有指定分隔符的单个字符串中。
一旦你有一个表示你的号码的字符串,你只需解析它就可以得到号码本身。
当然这不安全,取决于你可能的输入,这可能会失败:{1, 4, -5, 4 }
。一些错误检测和int.TryParse
可能是解决这个问题的最佳方法,这个例子只是为了解决这个问题。
另一答案
为什么不将它们转换为字符串然后连接?
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);
}
}
}
另一答案
尝试使用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);
}
}
这会将数组中的数字转换为字符串,然后将其转换为数字。
另一答案
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)
以上是关于将int数组合并为单个int的主要内容,如果未能解决你的问题,请参考以下文章
将多个 int 列/行合并为一个 numpy 数组(熊猫数据框)