Вопрос по массиву

 

Друзья операторы всем привет.

Вапрос по массиву в очередной раз... 

Поставил цель собирать данные в 3 или 4 мерный массив.

Если правильно вычитал ФАК то 3 мерных массив это:

Дим1 это ячейка

дим 2 это столбец

дим 3 индекс.  Индекс как правило типа ИНТ а мне нужно ещо присвоить индексу название типа СТРИНГ.Как в этом случаи быть обьявлять 4 мерный массив или есть какоето решение...

Если обьявлять то структура массива может быть double double int string?

Всем благодарен заранее за ответы.

 

В масссиве не  может быть разные типы данных. Если string количество ограничено, то можно сделать через enum. А лучше почитайте на форумах по Си как работать с много мерными массивами, Многомерный массив раскладыввается на одномерный . Тогда можно сделать Массив структур. 

 
Dmitiry Ananiev:

В масссиве не  может быть разные типы данных. Если string количество ограничено, то можно сделать через enum. А лучше почитайте на форумах по Си как работать с много мерными массивами, Многомерный массив раскладыввается на одномерный . Тогда можно сделать Массив структур. 

Бальшое спасибо буду читать.
 

Да и ещо один вапрос.

В тридесятом царстве на сколько я понимаю это число 27 тоесть три 9 что-то происходит .Итак вапрос как выглядит массив из 27 измерений... У когото есть мысли.. у меня воображение не работает дальше 4 массива.

 
Yevheniy Kopanitskyy:

Да и ещо один вапрос.

В тридесятом царстве на сколько я понимаю это число 27 тоесть три 9 что-то происходит .Итак вапрос как выглядит массив из 27 измерений... У когото есть мысли.. у меня воображение не работает дальше 4 массива.

например 4-х мерный

arr[,,,]

 

Создайте структуру, например:

struct SArray  
{ 
  int      Element1;
  double   Element2;
  string   Element3; 
};

Потом можно объявить массив.

SArray Arr[10];

И использовать его как обычно.

Arr[0].Element1 = 1;
Arr[0].Element2 = 0.1;
Arr[0].Element3 = "Строка";
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct superstruct // определяем структуру
  {
   int               index;
   double            column1;
   double            column2;
   string            comment;
  };
superstruct super_array[]; // создаем массив структур
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   int size=100;
   ArrayResize(super_array,size); // размечаем массив
   for(int i=0;i<size;i++)
     {
      super_array[i].index=i;            // назначаем индекс
      super_array[i].column1=MathRand(); // заполняем колонку 1 массива
      super_array[i].column2=MathRand(); // заполняем колонку 1 массива
      super_array[i].comment="всё тлен"; // заполняем текстовую колонку
     }
   return(INIT_SUCCEEDED);
  }

я бы так сделал например

-------

а вот меня опередили уже ну ладно... удалю если что...

 
transcendreamer:


-------

а вот меня опередили уже ну ладно... удалю если что...

Не, не удаляйте. У вас пример для динамического массива. У меня для статичного. Так что думаю оба примера будут полезны для ТС.

P.S.

Удивляет только как он с такими вопросами, что то в маркете публикует. :)

 
transcendreamer:

я бы так сделал например

-------

А Я бы так, если-бы была в этом необходимость, хотя одна функция у меня в коде так и работает

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct superstruct // определяем структуру
  {
   int               index[];
   double            column1[];
   double            column2[];
   string            comment[];
  };
superstruct super_array[][20]; // создаем массив структур
 
Vitaly Muzichenko:

А Я бы так, если-бы была в этом необходимость, хотя одна функция у меня в коде так и работает

О, 2-мерный массив структур, это уже следующий уровень крутости, или наверное еще можно структуру в структуру вложить (не пробовал, позволяет ли язык).

 

А по мне - все эти многомерные массивы - это почва для трудноуловимых ошибок.

Код должен быть простой, как три копейки. 

По мне - куда надежнее вложенные интерфейсы.  Интерфейс, в отличие от массива - не дает тебе возможности совершить что-то, на что он не рассчитан. С массивами - очень легко перепутать индексы, и заполнить не ту ячейку, которую рассчитываешь. Кроме того, легко заполнить ячейку неправильным значением.

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