arrays - 哈希值数组

标签 arrays ruby hash

想做这样的转换,但是没有得到正确的结果

 old = {
      1 => %w(A E I O U L N R S T),
      2 => %w(D G),
      3 => %w(B C M P),
      4 => %w(F H V W Y),
      5 => %w(K),
      8 => %w(J X),
      10 => %w(Q Z)
    }

expected = {
  'a' => 1, 'b' => 3, 'c' => 3, 'd' => 2, 'e' => 1,
  'f' => 4, 'g' => 2, 'h' => 4, 'i' => 1, 'j' => 8,
  'k' => 5, 'l' => 1, 'm' => 3, 'n' => 1, 'o' => 1,
  'p' => 3, 'q' => 10, 'r' => 1, 's' => 1, 't' => 1,
  'u' => 1, 'v' => 4, 'w' => 4, 'x' => 8, 'y' => 4,
  'z' => 10
}

使用嵌套循环实现我的转换。我认为虽然内部循环正在循环,但外部循环不会增加。这是我的代码:

class Etl

    def self.transform(old)

        result = {}

        old.each do |key, value|
            value.each_with_index do |v, i|
                result[v[i]] = key
            end
        end

        result

    end


end 

最佳答案

你不需要使用索引,只需要使用v:

def self.transform(old)
    result = {}
    old.each do |key, value|
        value.each do |v|
            result[v.downcase] = key
        end
    end
    result
end

注意:已使用 String#downcase以匹配预期哈希的关键案例。


替代使用 Array#map , Enumerable#flat_map , Enumerable#to_h :

def self.transform(old)
    old.flat_map { |key, value|
      value.map { |v|
        [v.downcase, key]
      }
    }.sort.to_h
end

关于arrays - 哈希值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42490018/

相关文章:

c# - 在数据库中存储 C# GetHashCode() 是不可靠的

r - 从 data.frame 制作一个查找表

c - 已知值的完美哈希

c - 将文件中的整数分配给数组

javascript - 如何在javascript中动态地将带有数组的深层JS对象减少为没有数组的JS对象?

html - 在 Ruby 中转换回 HTML

ruby-on-rails - ActiveRecord 中属性的 Attr_encrypted 顺序

ruby - 将字符串拆分为哈希?

c - 通过初始化程序设置结构数组元素的语法?

Java——生命游戏;生命体检测的问题