arrays - Ruby on Rails - Ruby,如何使用相同的键从两个哈希中添加值,而不覆盖这些值?
问题描述
首先感谢您在这一点上帮助我解决我的 SQL 问题。
现在我正在为另一件事而苦苦挣扎,这让我想,说实话,我是否应该放弃成为一名程序员。
无论如何,我的问题是:我有一个哈希数组(并且在该哈希内还有另一个),如下所示:
[
{"A1"=>{:month=>1.0, :balance=>"0.0000", :price=>"9.0000"}},
{"A1"=>{:month=>7.0, :balance=>"34030.0000", :price=>"34030.0000"}},
{"A3"=>{:month=>4.0, :balance=>"34030.0000", :price=>"34030.0000"}},
...
]
我想要完成的是,如果有两个值具有相同的键,即“A1”,则将这些值添加到一个完整的哈希中,而不覆盖旧值并将月份作为所需的键输出:
[
{"A1"=> { 1 => { :balance=> "0.0000", :price=>"9.0000"} },
{ 7 => { :balance => "34030.0000", :price => "34030.0000" } }},
and so on...
]
这可能吗?
解决方案
由于您拥有的数据的当前格式,您将需要不止几个转换。它们中的大多数基于转换结果哈希的值,在通过它们唯一的键对数组中的哈希进行分组之后:
data
.group_by { |hash| hash.keys.first } # (1)
.transform_values { |value| value.flat_map(&:values) } # (2)
.transform_values { |values| values.index_by { |value| value[:month] } } # (3)
第一个转换是对当前对象进行分组,该对象包含一个哈希数组,通过其唯一的哈希键,因此keys.first
,导致:
{
"A1"=>[
{"A1"=>{:month=>1.0, :balance=>"0.0000", :price=>"9.0000"}},
{"A1"=>{:month=>7.0, :balance=>"34030.0000", :price=>"34030.0000"}}
],
"A3"=>[{"A3"=>{:month=>4.0, :balance=>"34030.0000", :price=>"34030.0000"}}]
}
第二,是从每个散列中只提取值,在结果散列中,带有散列数组:
{
"A1"=>[
{:month=>1.0, :balance=>"0.0000", :price=>"9.0000"},
{:month=>7.0, :balance=>"34030.0000", :price=>"34030.0000"}
],
"A3"=>[{:month=>4.0, :balance=>"34030.0000", :price=>"34030.0000"}]
}
然后,它只是缺少将散列数组转换为简单的散列,其键是 的值month
:
{
"A1"=>{
1.0=>{:month=>1.0, :balance=>"0.0000", :price=>"9.0000"},
7.0=>{:month=>7.0, :balance=>"34030.0000", :price=>"34030.0000"}
},
"A3"=>{4.0=>{:month=>4.0, :balance=>"34030.0000", :price=>"34030.0000"}}
}
推荐阅读
- java - 如何重新排列 LinkedList 中的元素,使负数排在第一位?它成功地结束了循环?
- wpf - 根据其内容调整 ListBox 项的宽度
- php - 如何从 Paypal 获取交易 ID (txn_id) 的详细信息?
- python - BiLSTM_Classifier 中的输入/输出/循环丢失层以及它们如何影响模型和预测
- spring - Spring MVC - 需要一个标题而不使用该值?
- notepad++ - 在 Notepad++ 中突出显示文本文件
- ruby-on-rails - 无法对哈希进行排序尝试了几种不同的方法
- r - 我可以从具有 0 行和 0 列的数据框中创建一个在 R 中具有 1 行和 11 列的小标题吗?
- excel - 无法将三个单独的宏集成为一个,以便可以使用单个按钮触发它们
- java - 由于运行时出现空指针异常,无法填充回收站视图