Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Как заполнить двумерный массив луа?
nykep
сообщение 3.3.2023, 23:10
Сообщение #1


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1212
Пользователь №: 15.246
Возраст: 25



за каждую итерацию фора я получаю координаты одной точки и нужно добавить эти координаты в пустой массив чтоб по окончании фора получился двумерный массив, заполненный всеми собранными координатами, такого же вида как получается при выполнении findcolor, то есть arr[i][1] это иксы и arr[i][2] игреки. Не могу сообразить, помогите пожалуйста.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.3.2023, 23:18
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27724
Пользователь №: 11.279



Код

--lua

local arr = {}
for i = 1, 10 do
    -- можно ручками собрать:
    arr[i] = {}
    arr[i][1] = "вася "..i
    arr[i][2] = os.time()
    -- если есть некоторая функция которая возвращает массив, то можно вот так:
    arr[i] = my_func()
end



--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 3.3.2023, 23:52
Сообщение #3


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1212
Пользователь №: 15.246
Возраст: 25



блин, а я с table.insert че то мудрил, спасибо, только хочу узнать что делает команда arr[i] = {} при каждом повторении?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.3.2023, 1:17
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27724
Пользователь №: 11.279



{} - это и есть таблица. пустая. ну точно так же как кавычки = строка, фигурные = таблица. можно кстати делать так:
Код

local arr = {"вася", 20}

-- или так:
local arr = {
   {"вася", 20},
   {"федя", 14}
}



--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 4.3.2023, 1:32
Сообщение #5


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1212
Пользователь №: 15.246
Возраст: 25



получается в двумерном массиве два значения arr[1][1] и arr[1][2] это один элемент?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.3.2023, 2:00
Сообщение #6


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27724
Пользователь №: 11.279



Индексы разные - элементы разные. Конткретно в этом примере массив один - arr, вложенный массив тоже один - индекс = 1, а вот элементы внтури вложенного массива разые 1 и 2.

Смотрите луа в этом плане полностью гибкий. Вы можете в таблицы/массивы помещать любые типы данных. Т.е. в примере с фором я создал таблицу и в эту таблицу помещаю другие таблицы, в эти вложенные таблицы помещаю итоговые значения. Вам нужно понять одну вещь ложки двумерных массивов не существует. Зато существуют массивы которые содержат в себе массивы, что для нас воспринимается, как двумерный массив. По сути когда вы вызываете arr[1][1] происходит следующее:
Код
(arr[1])[1]
, т.е. сначала вам вернется элемент который содержится в arr[1], а потом из вернувшегося элемента (который у нас является вложенным массивом) выдернется элемент [1]. Кстати запись (arr[1])[1] абсолютно корректная, но бессмысленная в рамках луа. Но подобный вызов может пригодиться, когда некторая функция возрващает массив, а вам нужет оттуда только один параметр:
Код
local my_param = my_func()[5]


если же некоторая функция возвращает много параметров и не охота с ними возиться помещая в бессмысленные переменые типа:
Код
local _, _, _, _, my_param = my_func()

можно сделать так:
Код
local my_func = function()
    return 1, 2, 3, 4, 5
end

local my_param = ({my_func()})[5]

log(my_param)


Сообщение отредактировал DarkMaster - 4.3.2023, 2:03


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 4.3.2023, 2:12
Сообщение #7


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1212
Пользователь №: 15.246
Возраст: 25



понятно, спасибо
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 26.4.2024, 14:06
Designed by Nickostyle