【发布时间】:2018-03-14 18:22:47
【问题描述】:
背景:
大家好,我正在尝试使用外部 API,并尝试从网站中拉入用户的所有关注者并应用一些排序。
我已经重构了很多代码,但是,有一个部分让我非常艰难。我相信有一种比我所包含的更简单的方法来实现这一点,并且非常感谢任何提示以更雄辩的方式做到这一点。
我的目标很简单。我想将一组哈希数组(我希望这是解释它的正确方法)折叠成一个哈希数组。
问题描述:
我有一个名为 f_collections 的数组,它有 5 个元素。每个元素都是一个大小为 200 的数组。这些数组的每个子元素都是大约 10 个键值对的散列。我对此的最佳表示如下:
f_collections = [ collection1, collection2, ..., collection5 ]
collection1 = [ hash1, hash2, ..., hash200]
hash1 = { user_id: 1, user_name: "bob", ...}
我正在尝试将这个多维数组折叠成一个哈希数组。由于有五个集合数组,这意味着结果数组将有 1000 个元素 - 所有这些元素都是散列。
followers = [hash1, hash2, ..., hash1000]
代码(即我不想保留的尝试):
我已经让它与一个 非常丑陋 的代码(见下文)一起工作,带有嵌套的 if 语句、块、for 循环等......这东西读起来简直就是一场噩梦我已经尽我最大的努力研究以更简单的方式做到这一点的方法,我就是不知道怎么做。我尝试过扁平化,但它似乎不起作用。
我主要只是包含这段代码来表明我已经非常努力地解决了这个问题,虽然我解决了它,但一定有更好的方法!
注意:我在下面的代码中将一些变量简化为整数,以使其更具可读性。
for n in 1..5 do
if n < 5
(0..199).each do |j|
if n == 1
nj = j
else
nj = (n - 1) * 200 + j
end
@followers[nj] = @f_collections[n-1].collection[j]
end
else
(0..199).each do |jj|
njj = (4) * 200 + jj
@followers[njj] = @f_collections[n-1].collection[jj]
end
end
end
【问题讨论】: