我需要检查一个散列数组,每个散列包含一个标签和一个数据数组。最终结果将是一个连接字符串,首先是label,然后是对应于该label的数据。
哈希的输入数组如下所示:[{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"
问:有没有一种更好,或者更有效的方法以循环方式从多个数组中获取数据?
最佳答案
这将起作用:
arr = [{ label: "first", data: [1, 3] },
{ label: "second", data: [3, 4, 5] },
{ label: "third", data: [] },
{ label: "fourth", data: [6] }]
results = []
arr.each do |h|
h[:data].each_with_index do |d, i|
results[i] ||= []
results[i] << "#{h[:label]}: #{d}"
end
end
results.flatten.join(', ')
#=> "first: 1, second: 3, fourth: 6, first: 3, second: 4, second: 5"