문제

를 만들고 싶은데 배열 10 * 10 * 10 C#아 int[][][] (지 int[,,]).

내가 쓸 수 있는 코드:

int[][][] count = new int[10][][];
for (int i = 0; i < 10; i++) {
    count[i] = new int[10][];
    for (int j = 0; j < 10; j++)
        count[i][j] = new int[10];
}

하지만 내가 찾는 것이 더 아름다운 방법이다.될 수 있는 그런 것 같:

int[][][] count = new int[10][10][10];
도움이 되었습니까?

해결책

int[][][] my3DArray = CreateJaggedArray<int[][][]>(1, 2, 3);

사용

static T CreateJaggedArray<T>(params int[] lengths)
{
    return (T)InitializeJaggedArray(typeof(T).GetElementType(), 0, lengths);
}

static object InitializeJaggedArray(Type type, int index, int[] lengths)
{
    Array array = Array.CreateInstance(type, lengths[index]);
    Type elementType = type.GetElementType();

    if (elementType != null)
    {
        for (int i = 0; i < lengths[index]; i++)
        {
            array.SetValue(
                InitializeJaggedArray(elementType, index + 1, lengths), i);
        }
    }

    return array;
}

다른 팁

당신은 이것을 시도 할 수 있습니다 :


int[][][] data =
{
    new[]
    {
        new[] {1,2,3}
    }, 
    new[]
    {
        new[] {1,2,3}
    }
};

또는 명시 적 값이없는 :


int[][][] data =
{
    new[]
    {
        Enumerable.Range(1, 100).ToArray()
    }, 
    new[]
    {
        Enumerable.Range(2, 100).ToArray()
    }
};

없음에서 건축을 만드는 방법을 배열을 만들의 모든 요소에 그것은,그래서 그것의하지 않을 수도 가까이하는 방법을 간단한 당신이 원하는 것입니다.이 될 것으로 많은 일로 그것은 정말입니다.

할 수 있는 방법을 만들기 위한 편안하고 모든 객체:

public static T[] CreateArray<T>(int cnt, Func<T> itemCreator) {
  T[] result = new T[cnt];
  for (int i = 0; i < result.Length; i++) {
    result[i] = itemCreator();
  }
  return result;
}

그런 다음 이를 사용할 수 있을 만드는 세 가지 수준의 톱 배열:

int[][][] count = CreateArray<int[][]>(10, () => CreateArray<int[]>(10, () => new int[10]));

3 차원 배열은 자신의 클래스를 만드는 좋은 사례처럼 들립니다. 대상 지향이되는 것은 아름답습니다.

2 개의 루프를 작성하는 것보다 더 우아한 방법은 없습니다. 그렇기 때문에 그들이 'Jagged'라고 불리는 이유는 각 하위 배열의 크기가 다를 수 있습니다.

그러나 그것은 질문을 남깁니다. 왜 [,,] 버전을 사용하지 않습니까?

int[][][] count = Array.ConvertAll(new bool[10], x =>
                  Array.ConvertAll(new bool[10], y => new int[10]));

동일한 DataTable이있는 데이터 세트를 사용할 수 있습니다. 그것은 3D 객체 (xyz = 행, 열, 테이블)처럼 행동 할 수 있습니다. 그러나 당신은 당신이 무엇을하든 큰 무언가로 끝날 것입니다. 여전히 1000 개의 항목을 설명해야합니다.

약간의 도움으로 LINQ

int[][][] count = new int[10][][].Select(t => new int[10][].Select(tt => new int[10]).ToArray()).ToArray();

확실히 예쁘지 않고 아마도 빠르지는 않지만 한 라이너입니다.

왜 이것을 시도하지 않습니까?

int[,,] count = new int[10, 10, 10]; // Multi-dimentional array.

이런 종류의 표현에서 볼 수있는 문제 ??

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top