すべての HASH キーを別のキーに置き換えます
概要
次のように、ハッシュ内のすべてのキーを別のキーに置き換えようとしています。
{
name: 'Josh',
surname: 'Simon',
cars: [{
name: 'Diablo',
seats: [{ name: 'Josh', surname: 'Simon' }],
},
{
name: 'Raptor',
seats: [{ name: 'Josh', surname: 'Simon' }],
},
{
name: 'Testarossa',
seats: [{ name: 'Josh', surname: 'Simon' }],
}],
}
車のキーを人に変更したいとします。そうすれば、次のようなことが実現できます。
{
name: 'Josh',
surname: 'Simon',
cars: [{
name: 'Diablo',
people: [{ name: 'Josh', surname: 'Simon' }],
},
{
name: 'Raptor',
people: [{ name: 'Josh', surname: 'Simon' }],
},
{
name: 'Testarossa',
people: [{ name: 'Josh', surname: 'Simon' }],
}],
}
これは何とかできますか?
解決策
古いキーを削除して、その値を新しいキーに割り当てることができます
hash =
{
name: 'Josh',
surname: 'Simon',
cars: [{
name: 'Diablo',
seats: [{ name: 'Josh', surname: 'Simon' }],
},
{
name: 'Raptor',
seats: [{ name: 'Josh', surname: 'Simon' }],
},
{
name: 'Testarossa',
seats: [{ name: 'Josh', surname: 'Simon' }],
}],
}
hash[:cars].each { |h| h[:people] = h.delete(:seats) }
hash
# => {
# name: 'Josh',
# surname: 'Simon',
# cars: [{
# name: 'Diablo',
# people: [{ name: 'Josh', surname: 'Simon' }],
# },
# {
# name: 'Raptor',
# people: [{ name: 'Josh', surname: 'Simon' }],
# },
# {
# name: 'Testarossa',
# people: [{ name: 'Josh', surname: 'Simon' }],
# }],
# }