DataContract + көп өлшемді массивтер - бұл үшін кез-келген шешім?

MSDN ішінен:

Топтаманың түрлерін біріктіру (жинақтардың жиынтығы) болып табылады   рұқсат. Жалтыраған массивтер коллекциялар жинағы ретінде қарастырылады.    Көп өлшемді массивтерге қолдау жоқ.

Демек, сіз көп өлшемді массивді қалыпты түрде сериялауға болмасаңыз, бұл қалай тиімді айналады? Менің ойым массивді түзететін және осы коллекцияны сериялайтын және оны саралау кезінде оны ашпайтын қасиетке ие болу керек, бірақ мен бұл тиімді екендігіне сенімді емеспін бе?

Кез-келген адам бұрын-соңды шешім таба ма?


Айта кету керек, түзетулер жұмыс істей алады, себебі менің өлшемдерім тұрақты болып табылады (олар қатты кодталған).

3
Сіз бұл массивтер қаншалықты үлкен екенін көрсете аласыз ба? Мүмкін сіз оларды қалай/не үшін пайдаланасыз.
қосылды автор Henk Holterman, көзі

3 жауаптар

2-D массивінің кез келген сәтте сіз O (n) күш-жігерін жұмсайсыз (немесе кірістегі элементке бір «өңдеу» бірлігі). 2-D және 1-D арасында кері байланыс орнату қиын емес, сіз айтқан сияқты. Шындығында үлкен көлемде (веб-қызметтің қоңырау шалу жиілігінің жиілігі) немесе өте шектеулі жүйеде (.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
қосылды

Ия, сіз оны түзете аласыз немесе Jagged-ize, неғұрлым ыңғайлы болса.

3
қосылды

Мүмкін кеңейтім әдісімен:

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
қосылды