Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 - Fatal编程技术网

Ruby 创建哈希时忽略空值

Ruby 创建哈希时忽略空值,ruby,Ruby,我创建了一个包含多个键的散列,我想省略包含nil值的键: 除此之外还有什么好的方法吗 if val1 h = { :key0 => val0, :key1 => val1, :key2 => val2 } else h = { :key0 => val0, :key2 => val2 } end 类似于 h = { :key0 => val0, :key1 => val1 if val1,

我创建了一个包含多个键的散列,我想省略包含nil值的键:

除此之外还有什么好的方法吗

if val1
  h = {
    :key0 => val0,
    :key1 => val1,
    :key2 => val2
  }
else
  h = {
    :key0 => val0,
    :key2 => val2
  }
end
类似于

h = {
  :key0 => val0,
  :key1 => val1 if val1, # gives an error
  :key2 => val2
}

编辑:感谢您的回复,非常有用。有没有一种方法可以定义一个散列文字而不必事后处理它?

delete\u if-method可以通过让位于一个块来删除某些元素。如果该块为元素返回true,则该元素将被删除。然后,为了删除值为nil的元素,代码应如下所示:

val0 = true
val1 = nil
val2 = true

h = {
  :key0 => val0,
  :key1 => val1, # I want to include this key only if val1 is not nil
  :key2 => val2
}

h.delete_if{ |key, val| val.nil? }

puts h #=> {:key0=>true, :key2=>true}

delete_if-method可以通过向块屈服来删除某些元素。如果该块为元素返回true,则该元素将被删除。然后,为了删除值为nil的元素,代码应如下所示:

val0 = true
val1 = nil
val2 = true

h = {
  :key0 => val0,
  :key1 => val1, # I want to include this key only if val1 is not nil
  :key2 => val2
}

h.delete_if{ |key, val| val.nil? }

puts h #=> {:key0=>true, :key2=>true}

最简单的方法是选择:

{ :key0 => 1, :key1 => nil }.select {|_,v| v } 
#=> { :key0 => 1 }

在这种情况下,如果v为“Falsy”false或nil,则省略该对。

最简单的方法是选择:

{ :key0 => 1, :key1 => nil }.select {|_,v| v } 
#=> { :key0 => 1 }
在这种情况下,如果v为false,则该对将被忽略。

您可以尝试该方法。该方法从hsh中删除块计算结果为false的每个键值对

h = { :key0 => 'val0',:key1 => nil,:key2 => 'val2',:key4 =>nil}


h.keep_if {|key,value| !value.nil?}
{:key0=>val0,:key2=>val2}

你可以试试这个方法。该方法从hsh中删除块计算结果为false的每个键值对

h = { :key0 => 'val0',:key1 => nil,:key2 => 'val2',:key4 =>nil}


h.keep_if {|key,value| !value.nil?}
{:key0=>val0,:key2=>val2}


检查这个问题,根据措辞错误地关闭imo。这是同一个问题,有几个很好的答案…看看这个问题,根据措辞错误地结束。这是同一个问题,有几个很好的答案。。。