gla*_*kou 71 ruby ruby-on-rails ruby-on-rails-3
除了给定的密钥之外,我想从哈希中删除每个密钥.
例如:
{
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想删除除"firstName"和/或"address"之外的所有内容
谢谢
Mar*_*her 250
怎么样slice?
hash.slice('firstName', 'lastName')
# => { 'firstName' => 'John', 'lastName' => 'Smith' }
Run Code Online (Sandbox Code Playgroud)
Jak*_*sey 47
其他一些选择:
h.select {|k,v| ["age", "address"].include?(k) }
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做:
class Hash
def select_keys(*args)
select {|k,v| args.include?(k) }
end
end
Run Code Online (Sandbox Code Playgroud)
所以你现在可以说:
h.select_keys("age", "address")
Run Code Online (Sandbox Code Playgroud)
如果您使用Rails,请考虑ActiveSupportexcept()方法:http://apidock.com/rails/Hash/ except
hash = { a: true, b: false, c: nil}
hash.except!(:c) # => { a: true, b: false}
hash # => { a: true, b: false }
Run Code Online (Sandbox Code Playgroud)
哈希#select做你想要的:
h = { "a" => 100, "b" => 200, "c" => 300 }
h.select {|k,v| k > "a"} #=> {"b" => 200, "c" => 300}
h.select {|k,v| v < 200} #=> {"a" => 100}
Run Code Online (Sandbox Code Playgroud)
编辑(评论):
假设h是上面的哈希:
h.select {|k,v| k == "age" || k == "address" }
Run Code Online (Sandbox Code Playgroud)
hash = { a: true, b: false, c: nil }
hash.extract!(:c) # => { c: nil }
hash # => { a: true, b: false }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35635 次 |
| 最近记录: |