2d структура данных в C # - PullRequest
1 голос
/ 25 сентября 2008

Я ищу ресурсы, которые могут помочь мне определить, какой подход использовать при создании 2d структуры данных с C #.

Ответы [ 5 ]

3 голосов
/ 25 сентября 2008

Вы имеете в виду многомерный массив? Все просто:

<type>[,] <name> = new <type>[<first dimenison>,<second dimension>];

Вот ссылка на MSDN:

Многомерные массивы (C #)

2 голосов
/ 25 сентября 2008

@ Traumapony-- Я бы на самом деле утверждал, что реальный прирост производительности достигается в одном гигантском плоском массиве, но это может быть просто показ корней моей обработки изображений в C ++.

Это зависит от того, что вам нужно сделать 2D-структуру. Если он хранит что-то, где каждый набор элементов во втором измерении имеет одинаковый размер, то вы хотите использовать что-то вроде большого 1D массива, потому что время поиска быстрее и управление данными проще. Как:

for (y = 0; y < ysize; y++){
   for (x = 0; x < xsize; x++){
      theArray[y*xsize + x] = //some stuff!
   }
}

И затем вы можете выполнять операции, которые игнорируют соседние пиксели одним проходом:

totalsize = xsize*ysize;
for (x = 0; x < totalsize; x++){
   theArray[x] = //some stuff!
}

За исключением того, что в C # вы, вероятно, хотите фактически вызвать библиотеку C ++ для выполнения такого рода обработки; C ++ работает быстрее, особенно если вы используете компилятор Intel.

Если у вас второе измерение, имеющее несколько разных размеров, то я ничего не сказал, и вы должны взглянуть на некоторые другие решения. Вам действительно нужно знать, каковы ваши функциональные требования, чтобы иметь возможность ответить на вопрос.

1 голос
/ 25 сентября 2008

В зависимости от типа данных вы можете использовать прямой двухмерный массив:

int[][] intGrid;

Если вам нужно запутаться, вы всегда можете использовать универсальный подход:

Dictionary<KeyValuePair<int,int>,string>;

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

Если вы хотите хранить пространственные данные двухмерных точек, System.Drawing имеет большую поддержку точек в двумерном пространстве.

0 голосов
/ 25 сентября 2008

Для производительности лучше не использовать многомерные массивы ([,]); вместо этого используйте зубчатые массивы. e.g.:

<type>[][] <name> = new <type>[<first dimension>];
for (int i = 0; i < <first dimension>; i++)
{
    <name>[i] = new <type>[<second dimension>];
}

Для доступа:

<type> item = <name>[<first index>][<second index>];
0 голосов
/ 25 сентября 2008

Структуры данных в C #

Серьезно, я не пытаюсь критиковать вопрос, но я получил тонны полезных результатов прямо в верхней части моего поиска, когда я гуглил:

data structures c#

Если у вас есть конкретные вопросы о конкретных структурах данных, у нас могут быть более конкретные ответы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...