我正在寻找解决问题的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是不够的,但我不确定我需要什么。我的代码可以工作,但它看起来不是很像红宝石。我应该在这里做什么?
发布于 2012-06-27 22:41:23
也许它不完全是你想要的,但至少它是可读的:
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)尽管如您所说,您的示例是对实际任务的简化,因此它可能不适用于您。在这种情况下,我建议继续使用您的原始解决方案。
发布于 2012-06-27 22:32:39
我认为我的例子不是最好的,但是...你可以决定
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,否则很难读懂……也许你最初的解决方案是最好的方法。
https://stackoverflow.com/questions/11228479
复制相似问题