Ruby 创建哈希时忽略空值
我创建了一个包含多个键的散列,我想省略包含nil值的键: 除此之外还有什么好的方法吗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,
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。这是同一个问题,有几个很好的答案…看看这个问题,根据措辞错误地结束。这是同一个问题,有几个很好的答案。。。