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

11 страниц V « < 2 3 4 5 6 > »   
Ответить в эту темуОткрыть новую тему
> Lua
Cockney
сообщение 27.4.2017, 17:41
Сообщение #61


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21060
Пользователь №: 16.156



что-то типа

Код
require


но там много нюансов.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.4.2017, 18:04
Сообщение #62


***********

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



Сортировка с учетом значений двух первых столбцов, третий игнорируется:
Цитата
Справку по луа я читал и не одну, так что копипаст не поможет. От примеров больше пользы.

Код
--lua

function mySort(a,b)
        if  a[1] < b [1] then
            return true
        else
            if  a[1] == b [1] and a[2] < b [2] then
                return true
            end
        end
        return false
end

arr = {}
arr [1] = {20, 10, 15}
arr [2] = {15, 5, 13}
arr [3] = {15, 4, 13}

table.sort(arr, mySort)

log (table.concat(arr[1], ","), table.concat(arr[2], ","), table.concat(arr[3], ","))

так же можно использовать упрощенную запись типа:
Код
arr [1] = {20, 10, 15}
arr [2] = {15, 5, 13}
table.sort (arr, function (a, b) return (a[1] < b[1]) end)


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


***********

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



кстати весьма забавная фишка: передача функции в качестве параметра.
Код
--lua

function show(a,b)
    a(b)
end

str = "vrs"
show(log, str)


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



Цитата
Сортировка с учетом значений двух первых столбцов, третий игнорируется:

Спасибо за пример. Теперь понятно что к чему.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 28.5.2017, 20:17
Сообщение #65


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



Цитата
А запятая так критична ? Он же и с запятой все рассчитывает.

Код
--lua
e = exp(1)
e = string.gsub(e, ",", ".")   -- замена запятой на точку, без этой строки ошибка
result = 12 * e
hint (result, e)   --  и опять запятая в переменной result

Т. е. после каждого вычисления подменять запятую это не совсем удобно.

Ещё вопрос:
Есть поле, допустим 5*5. Каждая точка имеет несколько параметров. Как лучше хранить все данные?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.5.2017, 2:47
Сообщение #66


***********

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



Цитата
Есть поле, допустим 5*5. Каждая точка имеет несколько параметров. Как лучше хранить все данные?

Массив.


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



Цитата
Есть поле, допустим 5*5. Каждая точка имеет несколько параметров. Как лучше хранить все данные?

Цитата
Массив.

Очень информативно (IMG:style_emoticons/default/smile.gif)
В пилотовском варианте:
Код
set %arr [1 1] 10 20 30
set %arr [1 2] 15 33 6
init_arr %tmp (1) %arr [1 2]    // костыль в виде временного массива
log %tmp [1 3]    // обратиться к параметру 3 2й точки.
end_script

Или же делать 3 массива 5*5, т. е. для каждого параметра свой массив.
На луа как-то удобнее можно сделать?


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


***********

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



в луа ты можешь сделать не только прямоугольник, но и кубик. Там вообще по большому счету все есть одно большое дерево и типы данных как угодно можно распределять. Тем не менее рекомендуется придерживаться индексации цифрами если важна производительность, если индексация идет именем, то это уже будет не массив, а хеш таблица и при переборе большого количества данных будут потери.
Т.е. в твоем случае делай массив 5*5 и каждому элементу массива присваивай либо еще один массив либо индексацию в виде имени добавляй.


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


***********

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



Пойми одну простую вещь: элемент массива может быть любым типом данных с любым уровнем вложенности, в т.ч. массивом, хештаблицей и т.д.


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



код
Код
--lua
log ("mode compact") log ("clear")
field = {}
z = 0

-- заполнение массива, для примера числами от 1 до 25
for i = 1, 5 do
     field [i] = {}
     for j = 1, 5 do
         z = z + 1
         field [i][j] = z
     end
end

-- вывод массива в лог
for i = 1, #field do
   log (unpack(field[i]))
end


field [1][1] = {100, 200, 300}   -- вариант 1
log (field [1][1][2])

--field [1][1] = {x=100, y=200, n=300}   -- вариант 2
--log (field[1][1].y)

Так должно быть?
Вариант 1 предпочтительнее в плане производительности?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 30.5.2017, 17:07
Сообщение #71


***********

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



Цитата
Так должно быть?

Да.
Цитата
Вариант 1 предпочтительнее в плане производительности?

Да, но нужно понимать насколько это критично для конкретного случая.

Первый вариант гарантирует, что данные будут расположены в памяти единым блоком (формально вроде бы не оговорено, но по факту луа старается делать именно так). Т.е. это массив в чистом виде.

Второй вариант будет содержать указатель на данные хранящиеся отдельно от непосредственно массива. Второй вариант может быть более производителен при присвоении строк, т.к. не будет требовать перестроения всего массива в момент присвоения, если строка не влазит. В этом варианте полная свобода по размеру данных в ячейке. Если мы пытаемся вставить элемент в середину массива, то это приводит к полному копированию "хвоста" массива, чтобы в середине образовалась дырка для наших данных. Указатели и хэш таблицы позволяют этого избежать, однако при переборе с большим количеством операций мы будем неизбежно проигрывать в производительности. Тут все достаточно очевидно на самом деле. Если у нас фиксированный массив, то интерпретатор вычисляет смещение от начала массива до нашей ячейки и получает данные, если хеш таблица, то интерпретатор вычисляет смещение от начала массива до нашей ячейки, считывает из нее указатель, получает данные по указателю. На один этап больше, дополнительное обращение к случайному участку памяти, как следствие снижение производительности.

// Кстати ты обратил внимание на то, что ты создаешь 2 мерный массив и присваиваешь ячейкам int значения, а потом вместа int присваиваешь массив? Вообще формально это допустимо, но выглядит дико.


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



Цитата
Кстати ты обратил внимание на то, что ты создаешь 2 мерный массив и присваиваешь ячейкам int значения, а потом вместа int присваиваешь массив? Вообще формально это допустимо, но выглядит дико.

Без понятия как оно должно быть. Как надо?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 31.5.2017, 11:36
Сообщение #73


***********

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



Цитата
for j = 1, 5 do
z = z + 1
field [i][j] = z
end

вот это бы выкинуть просто. Я понимаю, что оно для отладки, но ты потом этот "номер" заменяешь на массив. Луа прекрасен своей гибкостью и он это позволяет, но, как я уже говорил, выглядит это дико. Просто всмотрись в код, ты делаешь:
z = z + 1
field [i][j] = z
а ниже идет
field [i][j] = {x=100, y=200, n=300}

формально твой код полностью корректен.


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



Помедитировав полчаса над тем что ты написал, дошло (IMG:style_emoticons/default/smile.gif)
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 31.5.2017, 14:15
Сообщение #75


***********

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



Кстати подобные действия могут привести к падению производительности. Т.к. элемент содержал число(4 байта), а при присвоении массива там уже будет 12 байт(не влезет). Т.е. либо переформировываем массив, либо используем указатель и выносим данные из единого блока памяти.


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



Какой тип данных будет возвращать getlayout? Там же в некоторых раскладах есть буквы, т. е. сравнивать как строку?
Код
--lua
a = getlayout ()
hint (a)
if a == "00000409" then
    log ("+++++")
end

Такой вариант не работает. Или так нельзя сравнивать?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 11.6.2017, 18:26
Сообщение #77


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



build 4
Исправил возврат в Lua значений некоторых функций. Добавлялся пробел.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.6.2017, 18:51
Сообщение #78


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



findcolor также возвращает строки. Или он ещё не правился?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 11.6.2017, 20:20
Сообщение #79


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Так они почти все в принципе строки возвращают, просто getlayout возвращал "00000409 ".
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.6.2017, 21:38
Сообщение #80


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



Цитата
Так они почти все в принципе строки возвращают

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

11 страниц V « < 2 3 4 5 6 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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