【问题标题】:change hash key through function call通过函数调用更改哈希键
【发布时间】:2018-11-09 22:19:08
【问题描述】:

我有一个哈希,其中键是 country_id,我想将 country_id 键更改为实际具有国家/地区名称。我有一个可以进行 id 到名称转换的函数,但我不知道如何更新键并将其正确映射到它们的当前值。

由于我正在使用的 ruby​​\rails 版本,我也无法使用 transform_keys

我不知道将选择哪个国家/地区,因此我需要一种方法来循环遍历键并更新它们,然后存储回散列或具有正确映射值的新散列。

我拥有的哈希称为@trending_countries,键是当前需要更新的国家 ID,值包含该特定国家/地区的计数。

@trending_countries = {22=>2, 34=>3},我想要@trending_countries = {United States=>2, Canada=>3}的格式

我尝试在我的控制器中执行以下操作

@trending_countries.each {|k, v| @trending_countries[k] = Country.get_country_name(k)}

将 id 转换为名称的函数位于名为 Country 的单独模型中。

  # returns the country name when a country id is given.
  def self.get_country_name(country_id)
    country = self.find_by(id: country_id)
    return country.name
  end

【问题讨论】:

  • “由于我使用的 ruby​​\rails 版本” – 那是哪个版本?

标签: ruby-on-rails ruby


【解决方案1】:

一种方法如下:

old_hash.map { |key, value| [Country.get_country_name(key), value] }.to_h

【讨论】:

    【解决方案2】:
    old_hash = { 62=>:wee, 12=>:big, 8=>:medium }
    country_id_to_name = { 62=>"Monaco", 8=>"France", 12=>"China" }
    
    old_hash.each_with_object({}) { |(k,v),h| h[country_id_to_name[k]] = v }
      #=> {"Monaco"=>:wee, "China"=>:big, "France"=>:medium}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2016-04-02
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      相关资源
      最近更新 更多