Инициализация зубчатых массивов

Сделайте .* нежадный путем добавления' ?' после него:

Project name:\s+(.*?)\s+J[0-9]{7}:
18
задан nawfal 11 November 2013 в 10:03
поделиться

5 ответов

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;
}
24
ответ дан 30 November 2019 в 06:46
поделиться

Не существует встроенного способа создания массива и создания в нем всех элементов, поэтому он не будет даже близко к тому, насколько простым вы хотели бы, чтобы он был. Это потребует столько же работы, сколько и есть на самом деле.

Вы можете создать метод для создания массива и всех объектов в нем:

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]));
7
ответ дан 30 November 2019 в 06:46
поделиться

Трехмерный массив звучит как хороший случай для создания вашего собственного класса. Объектно-ориентированный подход может быть прекрасным.

0
ответ дан 30 November 2019 в 06:46
поделиться

Нет более элегантного способа, чем написать 2 цикла for. Поэтому их называют «зубчатыми», размеры каждого подмассива могут быть разными.

Но остается вопрос: почему бы не использовать версию [,,]?

1
ответ дан 30 November 2019 в 06:46
поделиться

Вы можете использовать набор данных с идентичными таблицами данных. Это может вести себя как трехмерный объект (xyz = строка, столбец, таблица) ... Но в конечном итоге вы получите что-то большое, что бы вы ни делали; вам по-прежнему нужно учитывать 1000 предметов.

0
ответ дан 30 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: