在ruby中存储单键的常用方法
目前,我的ruby代码中有一组密钥,存储在hash对象中。当我添加新元素时,我只需检查该键是否已经存在,如果不存在,则使用一些默认值将新键添加到我的集合中,如下所示:在ruby中存储单键的常用方法,ruby,hash,Ruby,Hash,目前,我的ruby代码中有一组密钥,存储在hash对象中。当我添加新元素时,我只需检查该键是否已经存在,如果不存在,则使用一些默认值将新键添加到我的集合中,如下所示: unless @issues.has_key?(issue_id) @issues[issue_id] = ''; end 但是我不喜欢这种方法。是否可以在不使用不必要的值的情况下使其更好。使用。 集合是唯一对象的集合(无重复) 可以使用哈希的默认值 h = Hash.new("") h[issue_id] => "
unless @issues.has_key?(issue_id)
@issues[issue_id] = '';
end
但是我不喜欢这种方法。是否可以在不使用不必要的值的情况下使其更好。使用。
集合是唯一对象的集合(无重复)
可以使用哈希的默认值
h = Hash.new("")
h[issue_id] => ""
如何添加新元素?如果你能同时提供key和value,我认为这个问题没有意义。如果您只是为未定义的键请求一些值,只需将一个对象或块传递给
Hash
构造函数即可。就像@issues=Hash.new(“”)
然后@issues[:unexisting]=''
。Hash存储键和值。我没有价值,我只需要存储密钥。我知道,这是我这样做的方式(顺便提一下,问题中提到了),但我不喜欢这种方式。你说“使用一些默认值向我的集合中添加新密钥”,但我的决定是只定义一次默认值。嗯,如果我这样做,然后决定添加新的键,这将是语法?通常,将空键保留在哈希中意味着可以重新设计算法,只需重新考虑您的决定。感谢您=)这是我的最佳选择。
class Foo
attr_read :name, :hash
def initialize(name)
@name = name
@hash = name.hash
end
def eql?(o)
o.is_a?(Foo) && (o.name == self.name)
end
end
s = Set.new
s << Foo.new("Foo!")
s << Foo.new("Foo!")
s.to_a # => [ #<Foo:0x0123 @name="Foo!"> ]
h = Hash.new("")
h[issue_id] => ""