2014-10-27 5 views
0

Я новичок в Lua, и я хочу попробовать отобразить элемент из массива, но это похоже на массив внутри массива.Lua - Сопоставьте строку с элементом в массиве?

Это мой список:

local itemlist = { 
    { name="blue car", price=5000 }, 
    { name="red car", price=10000 }, 
    { name="green car", price=2000 } 
} 

И поэтому, если я бы входной текст «красный автомобиль» Я хочу, чтобы вывести что-то вроде этого:

The red car costs 10000 dollars. 

Как я могу сделать это в Lua? До сих пор я нашел несколько примеров сопоставлений строк, где я могу видеть, содержит ли массив элемент, но я хочу, чтобы он выводил эту И цену. Как мне добраться до цены? Я даже не знаю, с чего начать.

ответ

1

Вам не нужно иметь соответствие шаблону в вашем простом примере.

local str = "red car" 
for _, v in ipairs(itemlist) do 
    if v.name == str then 
     print("The " .. v.name .. " costs " .. tostring(v.price) .. " dollars.") 
    end 
end 
+0

Он отлично работает на первой позиции в списке, но вторые (красный автомобиль и зеленый автомобиль) не будут распечатаны. Я набрал «синюю машину», и он отлично отобразил ее. Ohhhhhhhhh nvm это работает сейчас! БЛАГОДАРЯ!!!! – aliazik

+0

Кстати, как я могу сделать «str», если элемент находится в списке. Вместо того, чтобы устанавливать локальный str = красный автомобиль », например, если я набираю ЛЮБОЙ из имен элементов, он распознает его. И если элемент отсутствует в списке, например,« Фиолетовый автомобиль », он скажет:« У меня нет этого автомобиля в « – aliazik

+0

@aliazik Используйте логический флаг, например' local found_car = false', если имя совпадает, устанавливает его в 'true' и выходит из цикла. Проверьте его значение, когда цикл завершен. –

2

Вы должны прочитать о таблицах и таблицах с последовательностями в руководстве. Затем вы можете решить, следует ли использовать pairs или ipairs для перебора по столу.

Другой подход, если имена будут уникальными, было бы изменение структуры:

local itemlist = { 
    ["blue car"] = { price=5000 }, 
    ["red car"] = { price=10000 }, 
    ["green car"] = { price=2000 } 
} 

-- or even 

local prices = { 
    ["blue car"] = 5000, 
    ["red car"] = 10000, 
    ["green car"] = 2000 
} 

print(itemlist["red car"].price); 
print(prices["red car"]); 
Смежные вопросы