Techioz Blog

すべての 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' }],
#      }],
#    }