我正在寻找解决问题的Ruby-est方法。
我的应用程序中有与此类似的表单代码:
data = [1,2,3,4]
a = []
b = []
h = {}
data.each do |val|
h[val] = func1(val)
a.push func2(val)
b.push func3(val)
end
这当然是一种简化。根据这样的代码,我想做的是消除这段代码的2-4行,以便我有类似的东西:
h, a, b = data.some_func{|val|
# do something
}
我的直觉是map
还不够,但我不确定我需要什么。我的代码有效,但看起来并不那么红润。我该怎么办?
答案 0 :(得分:2)
我认为我的例子不是最好的,但是......你可以决定
h, a, b = data.each_with_object([ {}, [], [] ]) do |val, obj|
obj[0][val] = func1 val
obj[1] << func2(val)
obj[2] << func3(val)
end
编辑:除非您理解each_with_object,否则很难阅读...也许您最初的解决方案是最好的方法。
答案 1 :(得分:2)
也许这不是你所要求的,但至少它是可读的:
data = [1,2,3,4]
h = data.each_with_object({}) { |e, m| m[e] = func1(e) }
a = data.map &method(:func2)
b = data.map &method(:func3)
尽管如你所说,你的例子是一个简单的实际任务,所以它可能对你不起作用。在这种情况下,我建议保留原始解决方案。