Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中存储单键的常用方法_Ruby_Hash - Fatal编程技术网

在ruby中存储单键的常用方法

在ruby中存储单键的常用方法,ruby,hash,Ruby,Hash,目前,我的ruby代码中有一组密钥,存储在hash对象中。当我添加新元素时,我只需检查该键是否已经存在,如果不存在,则使用一些默认值将新键添加到我的集合中,如下所示: unless @issues.has_key?(issue_id) @issues[issue_id] = ''; end 但是我不喜欢这种方法。是否可以在不使用不必要的值的情况下使其更好。使用。 集合是唯一对象的集合(无重复) 可以使用哈希的默认值 h = Hash.new("") h[issue_id] => "

目前,我的ruby代码中有一组密钥,存储在hash对象中。当我添加新元素时,我只需检查该键是否已经存在,如果不存在,则使用一些默认值将新键添加到我的集合中,如下所示:

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] => ""