Как записать несколько значений в массив?

Scra1chy

Известный
Автор темы
36
2
Версия MoonLoader
.026-beta
Доброго времени суток!
Есть две функция: первая проводит саму обработку и прочее что необходимо :), вторая должна отображать информацию с массива.

В первую функцию входит 2 аргумента, которые затем должны записаться в общий массив, но при использовании table.insert(nicks, id, nick), выдаёт ошибку :(.
Пробовал параметры id и nick добавить ещё в 1 массив, который потом добавлялся бы к всем массивам (ассоциативный, если не ошибаюсь).
Но при вызове 2 функции, мне выводится что-то такое "[ML] (script) Nicks buffer: table: 0x0caad040 ".
Как тогда записать в массив несколько значений в таком случае?

Ники = {
ник1 = { id, ник такой-же что и в подразделе }
ник2 = { id, ник такой-же что и в подразделе }
и.т.д ...
}

function addNickInArray(argument)
local id, nick1 = argument:match("(%d+) (.+)")
local Nick = {
["id"] = id,
["nick"] = nick1
}
table.insert(nicks, Nick)
print("ID "..id.." | ".."Nick "..nick1)
end

function showarray()
print(nicks[1])
print(nicks[2])
end

p.s Может что-то упустил и не дописал в коде, или же неправильно сделал, но быдло-код и я новичок, так что заранее извиняюсь)
 
Решение
Lua:
local nicknamesArray = {}

function addNickToArray(argument)
    local id, nick = argument:match('^(%d+)%s(.+)$')
    if argument:match('^(%d+)%s(.+)$') then
        table.insert(nicknamesArray, {id = id, nickname = nick})
        return true
    else
        return false
    end
end

--
print(nicknamesArray[1]['id'], nicknamesArray[1]['nickname'])

savvin

Известный
406
139
Lua:
local nicknamesArray = {}

function addNickToArray(argument)
    local id, nick = argument:match('^(%d+)%s(.+)$')
    if argument:match('^(%d+)%s(.+)$') then
        table.insert(nicknamesArray, {id = id, nickname = nick})
        return true
    else
        return false
    end
end

--
print(nicknamesArray[1]['id'], nicknamesArray[1]['nickname'])
 
  • Нравится
Реакции: Scra1chy

Scra1chy

Известный
Автор темы
36
2
Lua:
local nicknamesArray = {}

function addNickToArray(argument)
    local id, nick = argument:match('^(%d+)%s(.+)$')
    if argument:match('^(%d+)%s(.+)$') then
        table.insert(nicknamesArray, {id = id, nickname = nick})
        return true
    else
        return false
    end
end

--
print(nicknamesArray[1]['id'], nicknamesArray[1]['nickname'])
Благодарю) А есть возможность добавить для каждой {id = id, nickname = nick} своё название? Например название этой строки будет такой-же как и id.
Пробовал для примера Name1 = {id = id, nickname = nick} , но получил ошибку(
 

trefa

3d print
Всефорумный модератор
2,107
1,264
Благодарю) А есть возможность добавить для каждой {id = id, nickname = nick} своё название? Например название этой строки будет такой-же как и id.
Пробовал для примера Name1 = {id = id, nickname = nick} , но получил ошибку(
Код:
tbl = {}


table.insert(tbl,{id = id, nick = nick})
 

trefa

3d print
Всефорумный модератор
2,107
1,264
А как он задаст имя подмассива? он же просто в массив tbl добавит id и nick. Или я не так понял?
А зачем тебе имя если данные в каждой таблице одинаковые, он просто добовляет индекс.
 

Scra1chy

Известный
Автор темы
36
2
А зачем тебе имя если данные в каждой таблице одинаковые, он просто добовляет индекс.
А как тогда потом искать и определять значение в этом массиве? Индекс в массиве будет неизвестен, как его в таком случае можно будет получить?
Извиняюсь за столь тупые вопросы, но в справочнике Lua не нашёл таких методов(,например давно работал в PHP с array_search, которая могла искать и возвращать данные.
 

savvin

Известный
406
139
А как тогда потом искать и определять значение в этом массиве? Индекс в массиве будет неизвестен, как его в таком случае можно будет получить?
Извиняюсь за столь тупые вопросы, но в справочнике Lua не нашёл таких методов(,например давно работал в PHP с array_search, которая могла искать и возвращать данные.
Lua:
массив =
{
    {id = 10, nickname = 'Ник'},
    {id = 0, nickname = 'Текст'}
}

print(массив[1][nickname]) -- вывод: "Ник"

-- выгруз всей таблицы
for i, gtable in ipairs(массив) do
    print(gtable.id, gtable.nickname)
end
--[[
вывод кода выше:
10 Ник
0 Текст
]]--
А как он задаст имя подмассива? он же просто в массив tbl добавит id и nick. Или я не так понял?
{id = id} добавляет в таблицу (в луа так называются массивы) подтаблицу (или как это назвать) значение id под именным индексом id
То есть представим что id = 255, тогда если использовать {id = id}, получается что ты добавил в таблицу {id = 255}. Здесь id - именной индекс, а 255 значение, которое к нему присваивается

Если не указывать им. индекс, то {255, 300, 400} добавит в таблицу подтаблицу с такими значениями:
[1] = 255, [2] = 300, [3] = 400

Собссна,
Lua:
arrayNew1 =
{
    { -- 1 ячейка, в луа таблицы начинаются с 1, а не 0 как в большинства ЯП
        id = 255,
        index = 300,
        key = 400
    }
}

print(arrayNew1[1]['id']) -- 255
print(arrayNew1[1]['index']) -- 300
print(arrayNew1[1]['key']) -- 400

print(arrayNew1[1][1]) -- логически, должно равняться 255, но выведет ошибку, ведь используется именной индекс
print(arrayNew1[1][2]) -- также, должно равняться 300, но та же ошибки
print(arrayNew1[1][3]) -- опять же ошибки, та же самая

arrayNew2 =
{
    { -- так же 1 ячейка
        255,
        300,
        400
    }
}

print(arrayNew1[1][1]) -- 255
print(arrayNew1[1][2]) -- 300
print(arrayNew1[1][3]) -- 400

Ячейке так же можно присвоить именной индекс
Lua:
arrayNew =
{
    First =
    {
        id = 255,
        index = 300,
        key = 400
    }
}

print(arrayNew['First']['id'])
print(arrayNew.First.id)
-- выведет одно и то же
 
Последнее редактирование:
  • Нравится
Реакции: Ivkide

Scra1chy

Известный
Автор темы
36
2
Lua:
массив =
{
    {id = 10, nickname = 'Ник'},
    {id = 0, nickname = 'Текст'}
}

print(массив[1][nickname]) -- вывод: "Ник"

-- выгруз всей таблицы
for i, gtable in ipairs(массив) do
    print(gtable.id, gtable.nickname)
end
--[[
вывод кода выше:
10 Ник
0 Текст
]]--

{id = id} добавляет в таблицу (в луа так называются массивы) подтаблицу (или как это назвать) значение id под именным индексом id
То есть представим что id = 255, тогда если использовать {id = id}, получается что ты добавил в таблицу {id = 255}. Здесь id - именной индекс, а 255 значение, которое к нему присваивается

Если не указывать им. индекс, то {255, 300, 400} добавит в таблицу подтаблицу с такими значениями:
[1] = 255, [2] = 300, [3] = 400

Собссна,
Lua:
arrayNew1 =
{
    { -- 1 ячейка, в луа таблицы начинаются с 1, а не 0 как в большинства ЯП
        id = 255,
        index = 300,
        key = 400
    }
}

print(arrayNew1[1]['id']) -- 255
print(arrayNew1[1]['index']) -- 300
print(arrayNew1[1]['key']) -- 400

print(arrayNew1[1][1]) -- логически, должно равняться 255, но выведет ошибку, ведь используется именной индекс
print(arrayNew1[1][2]) -- также, должно равняться 300, но та же ошибки
print(arrayNew1[1][3]) -- опять же ошибки, та же самая

arrayNew2 =
{
    { -- так же 1 ячейка
        255,
        300,
        400
    }
}

print(arrayNew1[1][1]) -- 255
print(arrayNew1[1][2]) -- 300
print(arrayNew1[1][3]) -- 400

Ячейке так же можно присвоить именной индекс
Lua:
arrayNew =
{
    First =
    {
        id = 255,
        index = 300,
        key = 400
    }
}

print(arrayNew['First']['id'])
print(arrayNew.First.id)
-- выведет одно и то же


nicks = {
Alex = { id = 70, nick = Alex }
Joseph = { id = 15, nick = Joseph }
}
print(nicks[Alex][id][nick]) -- где Alex, туда просто подставлялся бы аргумент заданный ранее в функции и искал значение с ним и выводил
Мне было интересно как в table.insert(nicknamesArray, {id = id, nickname = nick}) для {id = id, nickname = nick} задавать имя ячейки (подтаблицы/подмассива), что бы при обработке в массиве nicknamesArray, создавался подмассив(с названием, равным значению nick) и содержимым id, nick.