2016-09-26 2 views
2

У меня есть строка, которая состоит из цифр:Каков наиболее эффективный способ перебора числовой строки в Lua?

str = "1234567892" 

И я хочу, чтобы перебирать отдельные символы в нем и получить индексы конкретных чисел (например, «2»). Как я узнал, что я могу использовать gmatch и создать специальный итератор для хранения индексов (потому что, как я знаю, я просто не могу получить индексы с gmatch):

local indices = {} 
local counter = 0 
for c in str:gmatch"." do 
    counter = counter + 1 
    if c == "2" then 
     table.insert(indices, counter) 
    end 
end 

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

+5

'str: gmatch"() 2 "' –

ответ

2

Просто перебираем строки! Вы его преувеличиваете :)

local indices = {[0]={},{},{},{},{},{},{},{},{},{}} --Remove [0] = {}, if there's no chance of a 0 appearing in your string :) 
local str = "26842170434179427" 

local container 
for i = 1,#str do 
    container = indices[str:sub(i, i)] 
    container[#container+1] = i 
end 
container = nil 
1

Чтобы найти все индексы, а также не использовать регулярное выражение, но просто поиск текста

local i = 0 
while true do 
    i = string.find(str, '2', i+1, true) 
    if not i then break end 
    indices[#indices + 1] = i 
end