我不得不将int"123456"的每个值拆分为Int [],我已经有了解决方案,但我不知道有没有更好的方法:我的解决方案是:
public static int[] intToArray(int num){
String holder = num.ToString();
int[] numbers = new int[Holder.ToString().Length];
for(int i=0;i<numbers.length;i++){
numbers[i] = Convert.toInt32(holder.CharAt(i));
}
return numbers;
}
Run Code Online (Sandbox Code Playgroud)
Jah*_*ine 26
一个简单的解决方案 LINQ
int[] result = yourInt.ToString().Select(o=> Convert.ToInt32(o)).ToArray()
Run Code Online (Sandbox Code Playgroud)
Las*_*olt 19
我相信这会比来回转换更好.与JBSnorro的答案相反,我在转换为数组后反向,因此避免IEnumerable使用我认为会有助于提高代码速度的数据.此方法适用于非负数,因此0将返回new int[1] { 0 }.
如果它应该适用于负数,你可以做一个,n = Math.Abs(n)但我不认为这是有道理的.
此外,如果它应该更高性能,我可以创建最终数组开始,通过像if语句的组合二进制搜索来确定数字的位数.
public static int[] digitArr(int n)
{
if (n == 0) return new int[1] { 0 };
var digits = new List<int>();
for (; n != 0; n /= 10)
digits.Add(n % 10);
var arr = digits.ToArray();
Array.Reverse(arr);
return arr;
}
Run Code Online (Sandbox Code Playgroud)
更新2018年:
public static int numDigits(int n) {
if (n < 0) {
n = (n == Int32.MinValue) ? Int32.MaxValue : -n;
}
if (n < 10) return 1;
if (n < 100) return 2;
if (n < 1000) return 3;
if (n < 10000) return 4;
if (n < 100000) return 5;
if (n < 1000000) return 6;
if (n < 10000000) return 7;
if (n < 100000000) return 8;
if (n < 1000000000) return 9;
return 10;
}
public static int[] digitArr2(int n)
{
var result = new int[numDigits(n)];
for (int i = result.Length - 1; i >= 0; i--) {
result[i] = n % 10;
n /= 10;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
Sae*_*iri 12
int[] outarry = Array.ConvertAll(num.ToString().ToArray(), x=>(int)x);
Run Code Online (Sandbox Code Playgroud)
但如果你想将其转换为1,2,3,4,5:
int[] outarry = Array.ConvertAll(num.ToString().ToArray(), x=>(int)x - 48);
Run Code Online (Sandbox Code Playgroud)
我会这样做:
var result = new List<int>();
while (num != 0) {
result.Insert(0, num % 10);
num = num / 10;
}
return result.ToArray();
Run Code Online (Sandbox Code Playgroud)
性能稍差但可能更优雅的是:
return num.ToString().Select(c => Convert.ToInt32(c.ToString())).ToArray();
Run Code Online (Sandbox Code Playgroud)
请注意,这些都返回 1,2,3,4,5,6 而不是 49,50,51,52,53,54(即字符 '1','2','3',' 的字节码4','5','6') 就像您的代码一样。我认为这是实际意图?
使用从int到string和back的转换可能不是那么快.我会使用以下内容
public static int[] ToDigitArray(int i)
{
List<int> result = new List<int>();
while (i != 0)
{
result.Add(i % 10);
i /= 10;
}
return result.Reverse().ToArray();
}
Run Code Online (Sandbox Code Playgroud)
我必须注意,这只适用于严格正整数.
编辑:
我提出了另一种选择.如果性能确实是一个问题,这可能会更快,尽管您只能通过自己检查它的具体用法和应用程序来确定.
public static int[] ToDigitArray(int n)
{
int[] result = new int[GetDigitArrayLength(n)];
for (int i = 0; i < result.Length; i++)
{
result[result.Length - i - 1] = n % 10;
n /= 10;
}
return result;
}
private static int GetDigitArrayLength(int n)
{
if (n == 0)
return 1;
return 1 + (int)Math.Log10(n);
}
Run Code Online (Sandbox Code Playgroud)
当n是非负时,这种方法有效.