XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
SRes
1110101000
offline
Опыт: 9,997
Активность:
Двухмерные массивы
sabj, есть ли такое в джассе ?
Старый 19.05.2009, 23:20
agentex

offline
Опыт: 34,834
Активность:
ноу зато есть кеш и паралелки
Старый 19.05.2009, 23:22
SRes
1110101000
offline
Опыт: 9,997
Активность:
Кеш - нет, я его не умею юзать. Короче, спасибо за ответ - можно биться ап стенку...
Старый 19.05.2009, 23:25
ScorpioT1000
Работаем
online
Опыт: отключен
Старый 19.05.2009, 23:35
RazArt

offline
Опыт: 11,197
Активность:
SRes,зачем тебе двумерные массивы? И они кста есть в jngp...
Старый 19.05.2009, 23:35
SRes
1110101000
offline
Опыт: 9,997
Активность:
Чтобы не иметь в несколько раз больше гемора, чем могло бы быть.
Старый 20.05.2009, 00:00
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
SRes структуры тебе в помощь
Код:
struct a
integer array i[20]
endstruct

globals
a array b
endglobals

//............
set b[n].i[m] = ...
//.............
Старый 20.05.2009, 09:31
alexkill

offline
Опыт: 18,872
Активность:
Цитата:
Сообщение от SRes
sabj, есть ли такое в джассе ?

Есть. Читай об их использовании в vJass-мануале. Также здесь вопрос обсуждался.
Старый 20.05.2009, 11:57
SRes
1110101000
offline
Опыт: 9,997
Активность:
Я спросил в джассе, люди, я не имел ввиду имитацию. Спасибо, в общем, мне все ясно. Нету нормальных, двухмерных массивов и все.
Старый 20.05.2009, 14:54
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
ELDAR, зачем так сложно? Можно сделать проще.
SRes, there is no 2d-arrays, Neo. Имитировать можно так:

Код:
// set MyArray[x*MAX_COL+y] = 123
// set zzz = MyArray[x*MAX_COL+y]
//
// MAX_COL - максимально кол-во столбцов
// x - номер нужной строки
// y - номер нужного столбца
//
//   x\y  0   1   2   3   4   5   6   7
//      +---+---+---+---+---+---+---+---+
//   0  +   +   +   +   +   +   +   +   +
//      +---+---+---+---+---+---+---+---+
//   1  +   +   +   +   + z +   +   +   +
//      +---+---+---+---+---+---+---+---+
//   2  +   +   +   +   +   +   +   +   +
//      +---+---+---+---+---+---+---+---+
//
//    MAX_COL = 8
//
// чтобы получить значение z, нужно вернуть значение MyArray[1*MAX_COL+4]
// то есть MyArray[12]
Старый 20.05.2009, 16:17
adic3x

offline
Опыт: 108,439
Активность:
двумерные массивы - это фантазия, их по определению не может быть в "плоской" памяти.
все это компиляторские штучки, но мы то знаем... свдн прав
Старый 20.05.2009, 16:39
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
круто) свдн, первый раз вижу имитацию двумерного в одномерном=)
Старый 20.05.2009, 18:00
J
expert
offline
Опыт: 48,447
Активность:
Артте двухмерных масивов не существует, в любом языке программирования это всеволиш имитация, которых существует только две
например ту имитацию двумерного массива что сказал свдн в си я встречаю довольно редко, в основном думерные масивы это указатель указывающий на начало одномерного массива указателей которые в свою очередь указывают на начало других одномерных массивов нужных нам элементов

J добавил:
вариант предложеный ELDAR это тоже имитация двумерного масива в одномерном
Старый 20.05.2009, 18:52
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
» quote << jasshelper manual

2D arrays

A quick improvement from sized arrays, is the ability to have two-dimensional arrays, n-dimensional arrays are not implemented, if you really need it very hard, contact me.

Two dimensional arrays in vJass, since vJass is implemented on top of Jass, are just normal arrays in disguise, using a multiplication trick to convert 2-dimension indexes into a one-dimension one. The way to declare one of these arrays is: <type> array name[width][height], notice the real size of the array is width*height, this size suffers the same limitations as normal array's size, it cannot go above approximately 40800, and if this size is bigger than 8191, you will be using slower function calls instead of array lookups and multiple arrays in the final script, etc.

The field size would return this total size we are talking about, the fields height and width return the ones we used to declare the array. As with sized arrays, you can use constants for the width and size.

Код:
globals
       integer array mat1 [10][20]

       constant integer W=100
       constant integer H=200
       integer array mat2 [W][H]

   endglobals

   function test takes nothing returns nothing
    local integer i=0
    local integer j=0
    local integer c=0
       call BJDebugMsg(I2S(mat1.size)) //displays 200 (10 * 20)

       //fill the array:
       loop
           exitwhen (i==mat1.width)
           set j=0
           loop
               exitwhen (j==mat1.height)
               set c=c+1
               set mat1[i][j]=c
               set j=j+1
           endloop

           set i=i+1
       endloop

       call BJDebugMsg( I2S( mat1[0][1]  )  ) //displays 2

       call BJDebugMsg( I2S( mat2.width) ) //displays 100
   endfunction

Старый 20.05.2009, 20:45
TmaRT

offline
Опыт: 1,360
Активность:
Вопрос конечно не в тему! а вот интересно имитация трех мерного масива возможна? как на показал на таблице свдн, хотя думаю в их потребности некто не нуждается...
Старый 21.05.2009, 23:35
J
expert
offline
Опыт: 48,447
Активность:
Код:
//real MyArray[CountX][CountY][CountZ]
globals
    constant integer CountX = 20
    constant integer CountY = 20
    constant integer CountZ = 20
    real array MyArray
endglobals

//set MyArray[x][y][z] = val
function SetVal takes integer x, integer y, integer z, real val returns nothing
    set MyArray[z*(CountX*CountY)+y*CountX+x] = val
endfunction

//MyArray[x][y][z]
function GetVal takes integer x, integer y, integer z returns real
    return MyArray[z*(CountX*CountY)+y*CountX+x]
endfunction
Старый 21.05.2009, 23:49
vit
кааааррл
offline
Опыт: 3,586
Активность:
по сабжу: н-мерный валяйте)
всмысле давайте отдельным модулем, что б можно было обьявлять типо
{type} array A [xn..xk,yn..yk,zn..zk] и тд
(напр паскаля: a:array[xn..xk] of [yn..yk] of [zn..zk] of {type} или type ar-n3: array [zn..zk] of {type}; ar-n2: array [yn..yk] of ar-n3; var ar-n1:array[xn..xk] of ar-n2; и тд)

vit добавил:
J а понял! врядли я подобное смогу написать, но мне вполне понятно куда еще впихнуться оси
Старый 22.05.2009, 00:46
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 07:03.