目前我的ruby代码中有一组密钥,它存储在哈希对象中。当我添加新元素时,我只检查该密钥是否已存在,如果没有,则将新密钥添加到我的集合中,并带有一些默认值,如下所示:
unless @issues.has_key?(issue_id)
@issues[issue_id] = '';
end
但我不喜欢这种方法。是否有可能在不使用不必要的价值的情况下做得更好。
答案 0 :(得分:1)
Set
。集合是唯一对象的集合(无重复)。
# @issues = Set.new
unless @issues.include?(issue_id)
@issues << issue_id
end
哈希的哈希键实际上是一个集合(虽然不一定通过Set类实现)。
[编辑] 请注意,如果您要存储复杂对象(例如,不是内置数据,字符串,符号等),则需要覆盖hash
method和eql?
method以便可以正确地进行哈希处理。如果您使用复杂对象作为散列键,也是如此。
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!"> ]
答案 1 :(得分:1)
您可以使用哈希值
的默认值h = Hash.new("")
h[issue_id] => ""