2016-06-09 5 views
2

У меня проблема здесь ... если у меня есть таблица с несколькими повторными строковыми результатами. Я хочу знать, какое значение имеет количество каждого. Например, . Функция возвращает неизвестные «буквы» и с неизвестными количествами в количествеПодсчитать неизвестные переменные из таблицы

Function() return Table end 
Table ={'a','a','c','b','b','a',...} 

И я хочу это получить.

table.a={'a','a','a'} 
table.b={'b','b'} 
table.c={'c'} 
.... 
.... 

Я понятия не имею, как ее решить ...

+0

Извините за мой английский! –

ответ

2

Написать функцию, которая создает хэш-карту этих вещей:

function RepetitionCounter(tInput) 
    local tCounter = {} 
    for i, v in ipairs(tInput) do 
     tCounter[v] = (tCounter[v] or 0) + 1 
    end 
    return tCounter 
end 

, который вы будете использовать следующий образ:

local tData = {'a','a','c','b','b','a',...} 
local tCounts = RepetitionCounter(tData) 

и таблица tCounts будет выглядеть следующим образом:

tCounts.a = 3 
tCounts.b = 2 
tCounts.c = 1 

Изменение функции выше, только немного, вы можете получить желаемый результат. Замените следующую строку:

tCounter[v] = (tCounter[v] or 0) + 1 

с

if not tCounter[v] then 
    tCounter[v] = {} 
else 
    table.insert(tCounter[v], v) 
end 
+1

Не следует «tCounter [v] = (tCounter [v] и tCounter [v] + 1) или 0« be »tCounter [v] = (tCounter [v] или 0) + 1"? – tonypdmtr

+0

@tonypdmtr Спасибо! Обновлено. знак равно – hjpotter92