PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Array как элемент Map


Array как элемент Map

Сообщений 1 страница 13 из 13

1

Товарищи, подскажите, может ли массив быть элементом хеш-карты? Бейсик не спорит с ситуацией типа Map("key") = array(), но потом непонятно как обратится к элементу массива через карту и ключ.

0

2

Map1() \array(1) - это элемент массива карты. Но надо создать структуру с массивом. В одном элементе карты будет весь массив.

0

3

AZJIO написал(а):

Map1() \array(1) - это элемент массива карты. Но надо создать структуру с массивом. В одном элементе карты будет весь массив.

это напрашивалось, но не то.

0

4

server1982 написал(а):

это напрашивалось, но не то.

а что то?

0

5

newJS написал(а):

а что то?

я же в первом сообщении написал. То - это когда массив является элементом карты с доступом к нему по ключу. Как таблицы в LUA или словарь питона.

0

6

server1982 написал(а):

То - это когда массив является элементом карты с доступом к нему по ключу

каким образом к массиву можно обратиться по текстовому ключу??????????
если придираться к словам, то в карте к массиву ты обращаешься по ключу карты, как ты и хочешь, а к элементу массива можно только по индексу
AZJIO всё тебе написал как надо

0

7

server1982 написал(а):

но не то.

то

server1982 написал(а):

я же в первом сообщении написал

может написал не то, перечитай.

Отредактировано AZJIO (30.05.2024 17:13:52)

0

8

newJS написал(а):

каким образом к массиву можно обратиться по текстовому ключу??????????
если придираться к словам, то в карте к массиву ты обращаешься по ключу карты, как ты и хочешь, а к элементу массива можно только по индексу
AZJIO всё тебе написал как надо

Например, в LUA:
map = {num = {5,6}, bg = {7,8}}
str = "num"
print(map[str][1])  --вывод 5
str = "bg"
print(map[str][2]) --вывод 8
map["new"] = {3,4}
str = "new"
print(map[str][2]) --вывод 4

то есть мы имеем доступ к вложенным таблицам по текстовому ключу, а к элементу этой таблицы - по индексу.

Отредактировано server1982 (01.06.2024 21:40:24)

0

9

AZJIO написал(а):

то

может написал не то, перечитай.

Отредактировано AZJIO (30.05.2024 17:13:52)

не то, потому что я заранее должен создать структуру с массивом. А если я получаю массив в процессе, и заранее не знаю про него ничего? Может его и не будет вообще. Выше я написал пример из LUA, там я просто добавляю в словарь новую таблицу с ключом в любой момент.

0

10

server1982
LUA - интерпретатор кода, а PureBasic - компилятор в машинный код.
Да, надо создать заранее формат данных, в чём проблема? Можно не заполнять массив ничем. Можно на ходу добавить элемент в карту. У массива также есть очистка FreeArray(), Redim - изменения размера, Dim - пересоздание массива. Пустой массив создаётся при добавлении элемента карты, то есть создание на ходу, CopyArray() - копирование массива, если он уже создан, то скопировать в элемент карты.

server1982 написал(а):

потому что я заранее должен создать структуру с массивом

структура это объявление отступов к элементам в объекте. Объявление структуры ничего не создаёт кроме отступа. При создании элемента карты по лекалам объявления структуры создаётся указатель на массив и отступ 0, так как массив в структуре первый и единственный. Когда ты указал элемент карты и элемент массива, то происходит обращение к массиву от указателя элементы карты со сдвигом 0 и сдвигом по индексу. Структура нужна только для целеуказания, а создаётся она в момент объявления/создания элемента.

Отредактировано AZJIO (02.06.2024 01:51:32)

0

11

AZJIO написал(а):

server1982
LUA - интерпретатор кода, а PureBasic - компилятор в машинный код.
Да, надо создать заранее формат данных, в чём проблема? Можно не заполнять массив ничем. Можно на ходу добавить элемент в карту. У массива также есть очистка FreeArray(), Redim - изменения размера, Dim - пересоздание массива. Пустой массив создаётся при добавлении элемента карты, то есть создание на ходу, CopyArray() - копирование массива, если он уже создан, то скопировать в элемент карты.

структура это объявление отступов к элементам в объекте. Объявление структуры ничего не создаёт кроме отступа. При создании элемента карты по лекалам объявления структуры создаётся указатель на массив и отступ 0, так как массив в структуре первый и единственный. Когда ты указал элемент карты и элемент массива, то происходит обращение к массиву от указателя элементы карты со сдвигом 0 и сдвигом по индексу. Структура нужна только для целеуказания, а создаётся она в момент объявления/создания элемента.

Отредактировано AZJIO (Сегодня 01:51:32)

я понял, точно также нет, но можно немного по другому. А если элемент такого массива тоже структура, не будет проблем? Что-то из разряда Map1() \array(1)\name?

0

12

server1982 написал(а):

точно также нет

мне пофиг...

server1982 написал(а):

не будет проблем? Что-то из разряда Map1() \array(1)\name?

нет
Хоть Map1()\array(1)\name\Map1()\array(1)\name, но на форуме была тема глюка из-за слишком много вложений и Фред устранял проблему.

0

13

AZJIO написал(а):

нет
Хоть Map1()\array(1)\name\Map1()\array(1)\name, но на форуме была тема глюка из-за слишком много вложений и Фред устранял проблему.

понял, спасибо

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Array как элемент Map