1

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

任意のヘルプと批判をいただければ幸いです。

4

6 に答える 6

4

Linq を使用すると、次のように実行できます。これは int 値から配列を作成するだけです。

var arrayOfInts = myint.ToString().Select(i => int.Parse(i.ToString())).ToArray();

EDIT : これを頻繁に使用する場合は、intの拡張メソッドとして作成することもできます。

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();
于 2012-09-28T07:00:13.390 に答える
3

に変換できます。後でLINQを使用intStringて各文字を整数に変換し、次を使用して整数の配列を返すことができます.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;
    }
于 2012-09-28T07:00:25.577 に答える
1
var res = 123456.ToString().Select(c => Int32.Parse(c.ToString())).ToArray();
于 2012-09-28T07:03:35.607 に答える
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]);
于 2012-09-28T07:05:40.263 に答える
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();

編集:負の数とゼロで動作するように改善

于 2012-09-28T07:07:29.873 に答える
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();
    }
}
于 2012-09-28T16:44:42.460 に答える