Подсчет значений на основе другого, итерация по вложенной таблице - LUA - PullRequest
1 голос
/ 14 марта 2020

Я все еще учусь lua, и функция пар великолепна, но я явно не понимаю, как правильно ее использовать:

Я пытаюсь подсчитать общее значение в Вложенная таблица, основанная на ее первом значении, а не ключе.

У меня есть таблица:

arr = {}
arr[100] = {1, "alpha", 4}
arr[10740] = {1, "bravo", 6}
arr[26104] = {2, "charlie", 7}
arr[150] = {3, "delta", 1}
arr[1006] = {2, "echo", 0}
arr[91002] = {1, "foxtrot", 2}
  • k - случайный атрибут - нечетный для ключа, но я должен быть таким образом
  • v [1] - это идентификатор группы,
  • v [2] - это имя группы,
  • v [3] - это номер в группе

Теперь я могу использовать парную функцию для подсчета суммы v [3] в таблице:

count = 0
for k, v in pairs(arr) do
count = count + v[3]
end;
print count

Что мне нужно сделать, так это вычислить сумму v [3] сгруппированных по v [1]. В таблице v [1] задано фиксированное число 1-16, но их может быть разное количество.

, но нужен результат чего-то вроде:

  • Группа 1 = 12
  • Группа 2 = 7
  • Группа 3 = 1

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

Большое спасибо заранее.

1 Ответ

2 голосов
/ 14 марта 2020

Вы на правильном пути, вам нужна дополнительная таблица для хранения счетчика на группу:

local group_count = {}
for k, v in pairs(arr) do
  group_count[v[1]] = (group_count[v[1]] or 0) + v[3]
end

-- not sorted output
for k, v in pairs(group_count) do
  print('Group '..k..' = '..v)
end
...