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

 
Ответить в эту темуОткрыть новую тему
> Имя переменной = имя массива, Получить все значения из одноименного массива
фонарик
сообщение 24.11.2020, 21:51
Сообщение #1


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



В переменную $var присваивается значение, которое соответствует имени массива. Обратиться к какому-либо значению одноименного массива можно просто %$var[1] А как, например, узнать размер одноименного массива, чтобы можно было в цикле перебрать все его значения? Подскажите пожалуйста.
Код
set $var vegetables

init_arr %fruits apple, orange, pineapple, banana
init_arr %vegetables potato, tomato, onion
init_arr %berry strawberry, raspberry, blueberry
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.11.2020, 22:11
Сообщение #2


***********

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



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


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


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



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

Мне нужно персонажу задать динамический маршрут из динамичной точки где он находится, в динамическую точку назначения. Грубо говоря, есть 16 квадратов (каждый комната). 4 ряда. Разное кол-во комнат в ряду. Из каждой комнаты есть проходы в другие комнаты (в смежные). Я хотел задать массив для каждой комнаты, задать массиву все проходы в этой комнате. Каждый проход чтобы равнялся другому массиву, чтобы можно было таким образом просчитать методом перебора путь, пока не совпадет с конечной комнатой. Как по другому решить эту задачу теперь вообще не знаю.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.11.2020, 22:53
Сообщение #4


***********

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



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


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


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Даа, спасибо вам в очередной раз DarkMaster за всегда полезные советы и наводки. Нашел я скрипт господина cirus, посмотрел что он делает, аж глаз задергался (IMG:style_emoticons/default/shok.gif) У меня задача намного проще, как оказалось. И вы правильно заметили: логика самое главное. Я понял, что изобретал правильный велосипед, хоть и не являюсь носителем правильной логики. Отсюда, наверное, и странные вопросы у меня.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 25.11.2020, 17:24
Сообщение #6


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



Сириус делал для поиска пути выхода из лабиринта. алгоритм а так не совсем понятно что конкретно нужно. Желательно более детально описывать что нужно и чего из этого требуется получить. А лучше всего пример или схему простую нарисовать
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 25.11.2020, 18:25
Сообщение #7


***********

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



Из того, что описал фонарик, я могу сделать вывод, что данный алгоритм применим в его случае.


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


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Цитата
А как, например, узнать размер одноименного массива
Случайно как-то, методом тыка обнаружил возможность:
Код
set $var vegetables

init_arr %fruits apple, orange, pineapple, banana
init_arr %vegetables potato, tomato, onion
init_arr %berry strawberry, raspberry, blueberry

eval (set %TempArr %$var)
msg size(%TempArr)

А дальше с массивом TempArr можно работать как с нормальным. Может кому пригодится (IMG:style_emoticons/default/biggrin.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 5.4.2021, 13:24
Сообщение #9


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



А как на Lua решить подобную задачу? Волшебный eval там вовсе какой-то не волшебным оказался (IMG:style_emoticons/default/sad.gif)
Цитата
--lua
log ("clear") log ("mode compact")

local choice_ = {'Раз', 'Два', 'Три'}
local defaultNum = 1
local TmpChoice = "choice_" .. defaultNum
log(TmpChoice) --выведет текст choice_1
Если мне надо из кусков текста собрать что-то, что за собой хранит нужный набор данных, как это делается?

Жаль здесь нет темы что-то типа "Общие вопросы" или в таком духе. Постоянно возникает тьма каких-то мимолетных вопросов, не заслуживающих отдельного топика (IMG:style_emoticons/default/unsure.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 5.4.2021, 13:42
Сообщение #10


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8459
Пользователь №: 19.451
Возраст: 32



Цитата(фонарик @ 5.4.2021, 13:24) *

А как на Lua решить подобную задачу? Волшебный eval там вовсе какой-то не волшебным оказался (IMG:style_emoticons/default/sad.gif)
Если мне надо из кусков текста собрать что-то, что за собой хранит нужный набор данных, как это делается?

Жаль здесь нет темы что-то типа "Общие вопросы" или в таком духе. Постоянно возникает тьма каких-то мимолетных вопросов, не заслуживающих отдельного топика (IMG:style_emoticons/default/unsure.gif)

Если правильно понял что ты хочешь
Код

--lua
log ("clear") log ("mode compact")

local choice_ = {'Раз', 'Два', 'Три'}
local defaultNum = 1
local TmpChoice = choice_[defaultNum]
log(TmpChoice)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.4.2021, 13:47
Сообщение #11


**********

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



Код
--lua
log ("clear") log ("mode compact")

local choice_ = {'Раз', 'Два', 'Три'}
local defaultNum = 1
local TmpChoice = choice_[2] .. tostring(defaultNum)
log(TmpChoice)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 5.4.2021, 14:13
Сообщение #12


***********

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



Цитата
Жаль здесь нет темы что-то типа "Общие вопросы" или в таком духе. Постоянно возникает тьма каких-то мимолетных вопросов, не заслуживающих отдельного топика

Как-то она появилась. Это одна из двух-трех закрытых мной тем за прошедшие 10 лет. Просто потому, что потом получается свалка. Любой вопрос заслуживает темы хотя бы потому, что потом можно будет найти ответ снова. В мегасвалке - нет.
Цитата
Если мне надо из кусков текста собрать что-то, что за собой хранит нужный набор данных, как это делается?

loadstring (string [, chunkname])

Similar to load, but gets the chunk from the given string.

To load and run a given string, use the idiom

assert(loadstring(s))()

When absent, chunkname defaults to the given string.


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


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Чтобы получить нужный тебе ответ, нужно задать правильный вопрос. С этим всегда сложно. Почистить весь кеш из головы, убрать все второстепенное, оставить самое важное. Сейчас я понял что задал неправильный вопрос.
Вот есть массивы
Код
local choice_1 = {'Раз', 'Два', 'Три'}
local choice_2 = {'Котик', 'Мишка', 'Тигрёнок'}

Как видно они отличаются цифровым номером. Допустим, есть код который возвращает число, например 1 или 2 в виде переменной
Код
local defaultNum = 2

Дальше мне нужно обратиться соответственно к массиву choice_2. Я пытался получить имя массива при помощи конкатенации
Код
local TmpChoice = "choice_" .. defaultNum
Теперь TmpChoice имеет правильное имя: choice_2. Но это не массив choice_2, а просто строковая переменная. А как получить доступ именно к массиву?

Да, DarkMaster по моему примеру на простых скриптах пилота говорил мне выше, что это неправильно когда имя массива динамическое. Но меня это не расстраивает, и на скриптинге пилота мне удалось разрешить этот вопрос. 8 пост в этой теме. А как сделать тоже самое на Lua ? eval тут не работает, он строки не превращает в одноимённые массивы (IMG:style_emoticons/default/sad.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 5.4.2021, 17:18
Сообщение #14


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2398
Пользователь №: 18.746



--lua
log"clear"

choice = {}
choice[1] = {'Раз''Два''Три'}
choice[2] = {'Котик''Мишка''Тигрёнок'}

defaultNum = 2
TmpChoice = choice[defaultNum]

log(unpack(TmpChoice))
log(choice[defaultNum][1])


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 5.4.2021, 17:30
Сообщение #15


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Наверное темповый вообще не нужен.

local choice = { {'Раз', 'Два', 'Три'} , {'Котик', 'Мишка', 'Тигрёнок'} }
local defaultNum = 2
log(choice[defaultNum][2]) -- это будет мишка


Можно вставлять и удалять что угодно в любую позицию. Хоть конкретный элемент, хоть целиком один из массивов.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 5.4.2021, 17:42
Сообщение #16


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Аха, понял (IMG:style_emoticons/default/smile.gif) Ребят спасибо вам большое (IMG:style_emoticons/default/thanks.gif) Оказывается, так можно было ))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 5.4.2021, 23:52
Сообщение #17


***********

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



Цитата
Аха, понял smile.gif Ребят спасибо вам большое thanks.gif Оказывается, так можно было ))

На самом деле можно вообще свинячить.
Код
--lua
log(_G)
local f = "fantasy"
_G["my_crazy_"..f] = {"кутяпликов","ловить", "пора", time = 10}
log(my_crazy_fantasy[1])
log(my_crazy_fantasy.time)
end_script ()

_G это таблица со всеми глобальными именами. Там содеражтся все глобальные переменные, загруженные модули и т.д. Соответственно мы можем создать некоторый элемент с произвольным именем. Единственное, он будет глобальным, что не правильно, но допустимо, а в некоторых случаях необходимо.

фонарик, вообще с таким подходом именования массивов ты подал идею шикарного прикола. Это написать какой-нибудь баг через поднобное именование и отдать тестеру. Ищи где проблема. Можно вешаться) Фишка в том, что даже если ты примитивно ударишь поиском чтобы найти все обращения к массиву, то ты не найдешь этого))) имя то сгенерированное и на этапе генерации там вообще, что угодно может быть. А потом массив из неоткуда и забаганный. Так, мне срочно нужен тестер, который не читает данный форум)))


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

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

 

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