Tag: 哈希

Ruby – 动态地向类添加属性(在运行时)

我正在寻找一种方法在运行时向我已经定义的类添加属性,或者更好: class Client attr_accessor :login, :password def initialize args = {} self.login = args[:login] self.password = args[:password] end end 但是,我有这个哈希 {:swift_bic=>”XXXX”, :account_name=>”XXXX”, :id=>”123″, :iban=>”XXXX”} 我希望这个哈希成为我的客户端实例的一部分 client = Client.new :login => ‘user’, :password => ‘xxxxx’ 然后带着神奇的魔力 client @@%$%PLIM!!! {:swift_bic=>”XXXX”, :account_name=>”XXXX”, :id=>”123″, :iban=>”XXXX”} 我可以访问 client.swift_bic => ‘XXXX’ client.account_name => ‘XXXX’ client.id => 123 我还想保持一个适当的对象结构,如: Client.new(:login => ‘user’, […]

如何合并两个哈希没有新的键

我怎么能合并两个哈希导致没有新的密钥,这意味着合并会合并两个哈希中存在的密钥? 例如,我想要以下内容: h = {:foo => “bar”} j = {:foo => “baz”, :extra => “value”} puts h.merge(j) # {:foo => “baz”} 我正在寻找一种非常干净的方法,因为我当前的实现非常混乱。

为什么我不能使用新的Ruby 1.9.2哈希语法将整数用作键?

Ruby 1.9.2中的新哈希语法意味着我可以执行以下操作: my_hash = {a: 1, b: 2, c: 3} ……相当于: my_hash = {:a => 1, :b => 2, :c => 3} 好的,所以使用旧的语法可以做到这一点(第一个键是一个整数): my_hash = {1 => 1, :b => 2, :c => 3} 而且我发现甚至可以混合使用这样的新语法和旧语法: my_hash = {1 => 1, b: 2, c: 3} 因此,如果我们援引“最少惊喜原则”,人们会认为以下是合法的: my_hash = {1: 1, b: 2, c: 3} ……但事实并非如此。 它会生成语法错误: […]

如何在Ruby中创建一个比较字符串的哈希值,忽略大小写?

在Ruby中,我想在Hash中存储一些东西,但我不希望它区分大小写。 例如: h = Hash.new h[“HELLO”] = 7 puts h[“hello”] 这应该输出7,即使情况不同。 我可以覆盖哈希的等价方法或类似的东西吗? 谢谢。

如何使用新的ruby(1.9)哈希语法从关联创建符号(哈希键)?

对不起,我甚至不确定如何提出这个问题..所以,如果你可以提出这个问题,我们将不胜感激。 # A. WORKS, but “stockroom” is hardcoded render partial: association.to_s.singularize + ”, locals: {stockroom: new_object} # B. WORKS, but uses old syntax render partial: association.to_s.singularize + ”, locals: {association.to_s.singularize.to_sym => new_object} # C. does NOT work render partial: association.to_s.singularize + ”, locals: {association.to_s.singularize.to_sym: new_object} # D. does NOT work ass = association.to_s.singularize.to_sym logger.debug “— […]

带有重复键的Ruby Hash?

是否可以在Ruby中创建允许重复键的哈希? 我在Ruby 1.9.2工作。

测试散列是否具有多个键中的任何一个

我想知道是否有更好的方法来测试散列是否有来自数组的任何键。 我想用它这样的东西: keys = %w[k1 k2 k5 k6] none = true if hash.key?(keys) 或者我将不得不循环这个?

Ruby方法Array#<<不用散列更新数组

灵感来自我如何用数组编组哈希? 我想知道Array#<<在以下代码中无法正常工作的原因是什么: h = Hash.new{Array.new} #=> {} h[0] #=> [] h[0] < [“a”] h[0] #=> [] # why?! h[0] += [‘a’] #=> [“a”] h[0] #=> [“a”] # as expected 它是否与<<就地更改数组,而Array#+创建新实例?这一事实有关?

将2元素数组的数组转换为散列,其中重复键附加其他值

例如 给定一个数组: array = [[:a,:b],[:a,:c],[:c,:b]] 返回以下哈希: hash = { :a => [:b,:c] , :c => [:b] } hash = Hash[array]覆盖以前的关联,产生: hash = { :a => :c , :c => :b }

访问嵌套哈希时如何避免nil元素的NoMethodError?

如果我尝试访问不存在的哈希元素,我会得到NoMethodError: undefined method ‘[]’ for nil:NilClass 。 但是,我无法预测哪些元素会出现。 @param_info = {} @param_info[“drug”][“name”] # => NoMethodError: undefined method `[]’ for nil:NilClass 当元素意外nil时,如何避免引发此错误?