【发布时间】:2016-04-09 13:16:38
【问题描述】:
我需要检查一个哈希数组,每个哈希包含一个标签和一个数据数组。最终结果将是一个连接的字符串,首先是标签,然后是与该标签对应的数据。
输入的哈希数组如下所示:[{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"
问题:是否有更好或更有效的方法以循环方式从多个数组中获取数据?
【问题讨论】:
-
首先应该是
second: 3吗?{label: "second", data: ["3", "4", "5"]} -
您是对的,感谢您的发现!我已经修改了我的示例以匹配。
-
round-robin不是有效的方法名称,在将element[:data][j]附加到result字符串时似乎有TypeError -
@Stefan 你说得对,我仓促地创建了方法名称和示例数据,并没有足够彻底地检查它。我已经纠正了我的例子。
标签: arrays ruby performance refactoring