gpt4 book ai didi

ruby-on-rails - 从 ruby​​ 中的哈希数组中获取独特的属性

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:32 26 4
gpt4 key购买 nike

给定一个哈希数组,我想创建一个返回哈希的方法,其中键是数组中哈希的唯一值。

例如,我想拿

[
{foo: 'bar', baz: 'bang'},
{foo: 'rab', baz: 'bang'},
{foo: 'bizz', baz: 'buzz'}
]

返回

{
foo: ['bar', 'rab', 'bizz'],
baz: ['bang', 'buzz']
}

我目前正在使用:

def my_fantastic_method(data)
response_data = { foo: [], baz: []}
data.each { |data|
data.attributes.each { |key, value|
response_data[key.to_sym] << value
}
}
response_data.each { |key, value| response_data[key] = response_data[key].uniq }
response_data
end

有没有更优雅的方式来做到这一点?谢谢!

最佳答案

你现在的做法已经很不错了;我看不到太多的改进空间。我会这样写:

def my_fantastic_method(data_list)
data_list.each_with_object(Hash.new { |h, k| h[k] = Set.new }) do |data, result|
data.attributes.each do |key, value|
result[key.to_sym] << value
end
end
end
  • 通过为每个散列值设置一个默认值,我不再需要显式声明foo: [], bar: []
  • 通过使用 each_with_object,我不再需要声明局部变量并在最后显式返回它。
  • 通过使用Set,不需要对最终结果调用uniq。这需要更少的代码,并且性能更高。但是,如果您真的希望最终结果是到 Array 而不是 Set 的映射,那么您需要调用 to_a方法末尾的每个值。
  • 我为 data_listdata 使用了不同的变量名。随心所欲地称呼这些,但通常认为是 bad practice隐藏外部变量。

关于ruby-on-rails - 从 ruby​​ 中的哈希数组中获取独特的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44705451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com