Мне нужно пройти массив хэшей, каждый хэш содержит метку и массив данных. Конечным результатом будет конкатенированная строка, первая метка, а затем данные, соответствующие этой метке.Рефакторинг: Round-robin извлекает элементы из вложенных массивов
Входной массив хэшей выглядит следующим образом:
[{label: "first", data: [1, 2]}, {label: "second", data: [3, 4, 5]}, {label: "third", data: []}, {label: "fourth", data: [6]}]
В этом примере max_returns
бы что-то высокое, как: 10
def round_robin(arr, max_returns)
result = ''
i = 0 # number of grabbed elements
j = 0 # inner array position
k = 0 # outer array position
l = 0 # number of times inner array length has been exceeded
while i < max_returns do
if k >= arr.length
j += 1
k = 0
end
element = arr[k]
if element[:data].empty?
k += 1
next
end
if j >= element[:data].length
l += 1
k += 1
if l > arr.length && i < max_returns
break
end
next
end
result += element[:label] + ': ' + element[:data][j].to_s + ', '
i += 1
k += 1
end
result
end
Основываясь на входе приведенного выше, вывод должен быть:
"first: 1, second: 3, fourth: 6, first: 2, second: 4, second: 5"
Также: max_returns
- максимальное количество полученных результатов. Так что, если мой пример был max_returns = 3
, то вывод был бы:
"first: 1, second: 3, fourth: 6"
Вопрос: Есть ли лучше, или более эффективный способ, чтобы захватить данные из нескольких массивов в циклическому?
Shoun'd, что будет 'второй: 3' в первую очередь? '{label:" second ", data: [" 3 "," 4 "," 5 "]}' – Draco18s
Вы правы, спасибо, что нашли это! Я пересмотрел свой пример, чтобы соответствовать. – Scytherswings
'round-robin' не является допустимым именем метода и кажется, что существует' TypeError' при добавлении 'element [: data] [j]' в строку 'result' – Stefan