PDA

Просмотр полной версии : [Вопрос] Массивы



Android
31.01.2021, 15:02
Как можно заполнить -1 трехмерный массив?
Вот одномерный:

new array[10] = { -1, ... };
Вот двумерный:

new array[10][20] = { { -1, ... }, ... };

punkochel
31.01.2021, 19:03
new array1[5][5] = {{0, ...}, {2, ...}, ...}; // прогрессия с шагом 2
new array2[5][5] = {{-1, ...}, ...}; // все значения равны -1
new array3[10] = {-1, ...}; // все значения будут равны -1
new array4[10] = {0, 1, ...}; // все значения будут от 0 до 9 (прогрессия)
new array5[10] = {1, 4, ...}; // та же прогрессия, только с шагом 3

new array3[5][5][5] = {

{{-1, ...}, ...},
{{-1, ...}, ...},
{{-1, ...}, ...},
{{-1, ...}, ...},
{{-1, ...}, ...}
};

Android
31.01.2021, 19:22
А трехмерный?

punkochel
31.01.2021, 19:25
Пока-что не сталкивался, но сейчас попробую что-то соорудить. Пока-что вариант есть, но он скорее относится к ручному заполнению массива (в первом сообщении)

Android
31.01.2021, 19:27
Попробовал сделать так:

new inv[10][10][10] = { { { -1, ...}, ...}, ... };
inv[0][0][0] = 23;
Но когда присваиваю значение, то возникает ошибка:

error 001: expected token: "{", but found "..."
error 001: expected token: "}", but found ";"

punkochel
31.01.2021, 19:38
Попробовал сделать так:

new inv[10][10][10] = { { { -1, ...}, ...}, ... };
inv[0][0][0] = 23;
Но когда присваиваю значение, то возникает ошибка:

error 001: expected token: "{", but found "..."
error 001: expected token: "}", but found ";"

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

Android
31.01.2021, 19:42
Логика заполнения верная, но почему-то выдает ошибку. Как вариант, если массив небольшой, то можно использовать пример из моего ответа. Пока-что ничего в голову не идет, может быть кто знающий еще предложит варианты решений

Ну в ручную не вариант.

Pro_Coder
31.01.2021, 21:14
Можно так в OnGameModeInit

#define MAX_INV_COUNT 10

for (new i; i < MAX_INV_COUNT; i++) {
for (new j; j < MAX_INV_COUNT; j++) {
for (new n; n < MAX_INV_COUNT; n++) {
inv[i][j][n] = -1;
}
}
}

punkochel
01.02.2021, 09:04
Можно так в OnGameModeInit

#define MAX_INV_COUNT 10

for (new i; i < MAX_INV_COUNT; i++) {
for (new j; j < MAX_INV_COUNT; j++) {
for (new n; n < MAX_INV_COUNT; n++) {
inv[i][j][n] = -1;
}
}
}

Если и пытаться использовать данный вариант, то лучше наверное так:

new array[5][10][15];
for(new i, j, k; i < sizeof(array); i++) {

for(j = 0; j < sizeof(array[]); j++) {

for(k = 0; k < sizeof(array[][]); k++) {

array[i][j][k] = -1;
}
}
}

Pro_Coder
01.02.2021, 14:57
new array[5][10][15];
for(new j, k, i = sizeof(array) - 1; i != -1; i--) {
for(j = sizeof(array[]) - 1; j != -1; j--) {
for(k = sizeof(array[][]) - 1; k != -1; k--) {
array[i][j][k] = -1;
}
}
}

DeimoS
02.02.2021, 01:09
Через промежуточный массив должно быть быстрее

new SomeArray[10][10][10];
main()
{
new larray[sizeof(SomeArray[])][sizeof(SomeArray[][])] = {{-1, ...}, ...};
for(new i; i < sizeof(SomeArray); i++)
{
SomeArray[i] = larray;
}
}

Pro_Coder
02.02.2021, 03:39
DeimoS, проверяй свой вариант?, ибо мне твой способ понравился, и решил проверить у себя. Но у меня левые числа идут

DeimoS
02.02.2021, 08:27
new SomeArray[10][10][10];
main()
{
new larray[sizeof(SomeArray[][])] = {-1, ...};
for(new i, j; i < sizeof(SomeArray); i++)
{
for(j = 0; j < sizeof(SomeArray[]); j++)
SomeArray[i][j] = larray;
}
}
Вот такой вариант должен сработать.

Pro_Coder
02.02.2021, 14:54
Да, работает

Android
02.02.2021, 18:14
Спасибо