有极限的稀疏数组
我有 AR 形式的对象数组 我想有限度地精简它们。
当前的方法看起来像:
def rarefied_values(limit = 200)
all_values = self.values.all
rarefied_values = []
chunk_size = (all_values.size / limit.to_f).ceil
if all_values.size > limit
all_values.each_slice(chunk_size) do |chunk|
rarefied_values.push(chunk.first)
end
return rarefied_values
else
return all_values
end
end
有重构的提示吗?
I have array of objects form AR
I want to rarefy them, with limit.
Current method looks like:
def rarefied_values(limit = 200)
all_values = self.values.all
rarefied_values = []
chunk_size = (all_values.size / limit.to_f).ceil
if all_values.size > limit
all_values.each_slice(chunk_size) do |chunk|
rarefied_values.push(chunk.first)
end
return rarefied_values
else
return all_values
end
end
Any hints for refactoring?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
ruby
self
中重构的一些一般要点self.class
。在本例中,self.values.all
=>values.all
return 将其从代码的其余部分中删除>。在这种情况下,
返回 all_values,除非 all_values.size > limit
all_values.size > 则不需要
rarefied_values = []
。限制。所以把它放在条件部分。Some general points in refactoring in ruby
self
can be omitted usually. In a few cases, you cannot, for exampleself.class
. In this case,self.values.all
=>values.all
return
. In this case,return all_values unless all_values.size > limit
rarefied_values = []
is not necessary ifall_values.size > limit
. So put that in the conditioned section.这是一个简单的重构,保留相同的方法,但删除显式返回调用,并且仅在必要时执行某些转换:
这是一个更快、更简洁的版本:
Here's a naïve refactor, keeping your same methods, but removing the explicit return calls and only performing certain transformations if necessary:
Here's a faster, more terse version: