DataContract + Многомерные массивы - есть ли решение для этого? - PullRequest
3 голосов
/ 28 октября 2011

С MSDN :

Допускается объединение типов коллекций (имеющих коллекции коллекций).Зубчатые массивы рассматриваются как коллекции коллекций. Многомерные массивы не поддерживаются.

Итак, если вы не можете нормально сериализовать многомерный массив, как можно эффективно обойти это?Моя мысль состоит в том, чтобы иметь свойство, которое выравнивает массив, сериализует эту коллекцию и разглаживает ее во время десериализации, но я не уверен, эффективно ли это?

Я должен отметить, что причина, по которой я думаю, что сглаживание может работать, заключается в том, что мои размеры являются фиксированным значением (они жестко запрограммированы).

Ответы [ 3 ]

3 голосов
/ 28 октября 2011

Каждый раз, когда вы копируете двумерный массив, вы тратите O (n) усилий (или одну единицу «обработки» на элемент во входных данных). Нетрудно перейти между 2-м и 1-м и обратно, как вы сказали. Если вы не имеете дело с действительно большими объемами (размер массива частоты вызовов веб-службы) или в сильно ограниченной системе (.Net Compact или .Net Micro Frameworks), я сомневаюсь, что это действительно будет большой проблемой. Такие вещи, как сортировка, стоят дорого.

       string[,] input = new string[5, 3];
       string[] output = new string[15];

       for (int i = 0; i < input.GetUpperBound(0); i++)
       {
           for (int j = 0; j < input.GetUpperBound(1); j++)
           {
               output[j * input.GetUpperBound(j) + i] = input[i, j];
           }
       }
3 голосов
/ 28 октября 2011

Может быть с методом расширения:

public static string[][] Jaggedize(this string[,] input) {
  string[][] output = new string[input.GetLength(0)][];
  for (int i = 0; i < input.GetLength(0); i++) {
    output[i] = new string[input.GetLength(1)];
    for (int j = 0; j < input.GetLength(1); j++) {
      output[i][j] = input[i, j];
    }
  }
  return output;
}
3 голосов
/ 28 октября 2011

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

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