我需要一个来自int值的int数组。
int值123456转换为int [] {1,2,3,4,5,6}。
有没有比这更好的解决方案:
using System.Diagnostics;
namespace test
{
#if DEBUG
[DebuggerDisplay("{GetDebuggerDisplay()}")]
#endif
public class IntArray
{
#if DEBUG
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
#endif
private int _value;
#if DEBUG
[DebuggerBrowsableAttribute(DebuggerBrowsableState.Never)]
#endif
private int[] _valueArray;
public IntArray(int intValue)
{
Value = intValue;
}
public int Value
{
get { return _value; }
set
{
_value = value;
_valueArray = null;
_valueArray = CreateIntArray(value);
}
}
public int[] Array
{
get { return _valueArray; }
}
private string GetDebuggerDisplay()
{
return string.Format("Value = {0}", Value);
}
private static int[] CreateIntArray(int value)
{
string s = value.ToString();
var intArray = new int[s.Length];
for (int i = 0; i < s.Length; i++)
intArray[i] = int.Parse(s[i].ToString());
return intArray;
}
}
}
任何帮助和批评都将不胜感激。
答案 0 :(得分:4)
您可以使用Linq执行以下操作。这只是从int值中生成数组。
var arrayOfInts = myint.ToString().Select(i => int.Parse(i.ToString())).ToArray();
编辑: 如果你想经常使用它,这也可以作为int的extension方法。
public static class IntExtensions
{
public static int[] ToArray(this int i)
{
return i.ToString().Select(c => int.Parse(c.ToString())).ToArray();
}
}
然后你可以通过这样做来使用这个扩展:
var myArray = 123456.ToArray();
答案 1 :(得分:3)
您可以将int
转换为String
,稍后您可以使用LINQ将每个字符转换为整数,然后使用.ToArray()
int a = 123456;
string tempA = a.ToString();
int[] temp = tempA.Select(r => Convert.ToInt32(r.ToString())).ToArray();
编辑: 根据Styxxy评论:
int a = 123456;
int[] array = new int[a.ToString().Length];
int i = array.Length - 1;
while (a > 0)
{
array[i--] = a % 10;
a = a / 10;
}
答案 2 :(得分:1)
var res = 123456.ToString().Select(c => Int32.Parse(c.ToString())).ToArray();
答案 3 :(得分:1)
使用char.GetNumericValue
的另一种方式:
int[] ints = 123456.ToString().Select(c => (int)char.GetNumericValue(c)).ToArray();
或没有Linq:
var chars = 123456.ToString();
int[] ints = new int[chars.Length];
for (int i = 0; i < chars.Length; i++)
ints[i] = (int)char.GetNumericValue(chars[i]);
答案 4 :(得分:1)
另一种方法:
public static int[] GetInts(this int value)
{
if (value == 0)
return new int[] { 0 };
else
{
int val = value;
List<int> values = new List<int>();
while (Math.Abs(val) >= 1)
{
values.Add(Math.Abs(val % 10));
val = val / 10;
}
values.Reverse();
return values.ToArray();
}
}
并使用它:
int value = 123456;
int[] values = value.GetInts();
编辑:改进后使用负数和零
答案 5 :(得分:0)
如评论中所述,最好使用基本的算术运算,而不是转换为字符串,循环字符串并将字符串解析为整数。
这是一个例子(我为整数做了一个扩展方法):
static class IntegerExtensions
{
public static int[] ToCypherArray(this int value)
{
var cyphers = new List<int>();
do
{
cyphers.Add(value % 10);
value = value / 10;
} while (value != 0);
cyphers.Reverse();
return cyphers.ToArray();
}
}
class Program
{
static void Main(string[] args)
{
int myNumber = 123456789;
int[] cypherArray = myNumber.ToCypherArray();
Array.ForEach(cypherArray, (i) => Console.WriteLine(i));
Console.ReadLine();
}
}