【问题标题】:How do I create a hash where the keys are values from an array Ruby如何创建一个哈希值,其中键是数组 Ruby 中的值
【发布时间】:2015-02-02 22:49:48
【问题描述】:

我有一个数组:

arr = [a, ab, abc]

我想做一个哈希,使用数组的值作为键:

newhash = [a[1], ab[1], abc[1]]

我试过了:

arr.each do |r|
    newhash[r] == 1
end

无济于事。

我将如何在 ruby​​ 中完成此任务?

【问题讨论】:

    标签: ruby arrays hash key


    【解决方案1】:

    如果你觉得自己像个单线,这也可以

    h = Hash[arr.collect { |v| [v, 1] } ]
    

    collect 对数组中的每个元素调用一次,因此它返回一个由键值对组成的 2 元素数组组成的数组。

    然后将其馈送到哈希构造函数,它将对数组转换为哈希

    【讨论】:

      【解决方案2】:

      您还可以使用Enumerable 中的#reduce 方法(包含在Array 类中)。

      new_hash = arr.reduce({}) { |hsh, elem| hsh[elem] = 1; hsh }
      

      你的new_hash 在 Ruby 中看起来像这样:

      {"a": 1, "ab": 1, "abc": 1}
      

      【讨论】:

        【解决方案3】:

        == 是比较。 = 正在分配。所以只需将==修改为=。它有效。

        newhash = {}
        arr.each do |r|
          newhash[r] = 1
        end
        

        (我相信 a,ab,abc 是字符串)

        要了解更多信息,这可能会对您有所帮助。 Array to Hash Ruby

        【讨论】:

          【解决方案4】:

          你可以这样做:

          ary = [[:foo, 1], [:bar, 2]]
          Hash[ary] # => {:foo=>1, :bar=>2}
          

          如果你想像之前尝试的那样做,你想正确初始化哈希:

          ary = [:foo, :bar]
          hash = {}
          ary.each do |key|
            hash[key] = 1
          end # => {:foo=>1, :bar=>2}
          

          【讨论】:

            猜你喜欢
            • 2013-05-17
            • 2015-04-19
            • 1970-01-01
            • 2022-01-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-02
            相关资源
            最近更新 更多