考虑以下哈希值:
H = {"a" => 100, "b" => 200, "c" => nil, "d" => nil}
我想用nil
保留"c"
的值,并用nil
除去"d"
的值。我该怎么办?
应用compact
将删除所有nil
值(即,使用键"c"
和"d"
)。
问题Removing all empty elements from a hash / YAML?解决了这个问题,但我认为应该有一个等效于.compact
的功能。
答案 0 :(得分:1)
有一个method:
h.delete_if { |k,v| v.nil? }
k,v
代表键/值对。
如果您可以量化为什么要保留c
密钥的原因,可以将其合并到逻辑中。仅仅是保存的第一个nil
吗?
如果是这样,您可以尝试以下方法:
count = 0
h.delete_if { |k,v| v.nil? && (count += 1) != 1 }
请注意,Ruby是区分大小写的语言,H
由于是大写字母而成为常量。对于变量,只能使用小写字母。
此外,声明Ruby哈希的传统方法是:
h = { "a" => 100, "b" => 200, "c" => nil, "d" => nil }
仅在需要字符串键的情况下。使用符号键,它更加简洁:
h = { a: 100, b: 200, c: nil, d: nil }
答案 1 :(得分:0)
如果我明白这一点,一旦您知道特定的键必须为nil
,例如"c"
,您可以执行以下操作:
h = {"a"=>100, "b"=>200, "c"=>nil, "d"=>nil}
h.compact!["c"] = nil
# => {"a"=>100, "b"=>200, "c"=>nil}
现在,如果您致电h["c"]
,您会得到nil
。
还请考虑当您简单地执行h.compact!
并致电h["c"]
时,您仍然会得到nil
。
答案 2 :(得分:0)
gui.getBoardPanel().getP2().getClass();
如果生成的键顺序不重要,则可以编写:
h = Hash["a" => 100, "b" => 200, "c" => nil, "d" => nil]
或
h.compact.merge("c" => nil)
#=> {"a"=>100, "b"=>200, "c"=>nil}
如果要在适当位置修改哈希值。
答案 3 :(得分:0)
如果这只是一个键,为什么不Hash#delete从哈希实例中删除该对呢?
enabled Maps SDK