Oneliner đồng bằng ruby, nó chỉ hoạt động với ruby> 1.9.x:
1.9.3p0 :002 > h = {:a => 1, :b => 2}
=> {:a=>1, :b=>2}
1.9.3p0 :003 > h.tap { |hs| hs.delete(:a) }
=> {:b=>2}
Tap phương pháp luôn luôn trả lại đối tượng trên được gọi ...
Mặt khác, nếu bạn có yêu cầu active_support/core_ext/hash
(được yêu cầu tự động trong mọi ứng dụng Rails), bạn có thể sử dụng một trong các phương pháp sau tùy thuộc vào nhu cầu của bạn:
➜ ~ irb
1.9.3p125 :001 > require 'active_support/core_ext/hash' => true
1.9.3p125 :002 > h = {:a => 1, :b => 2, :c => 3}
=> {:a=>1, :b=>2, :c=>3}
1.9.3p125 :003 > h.except(:a)
=> {:b=>2, :c=>3}
1.9.3p125 :004 > h.slice(:a)
=> {:a=>1}
ngoại trừ sử dụng cách tiếp cận danh sách đen, do đó, nó sẽ loại bỏ tất cả các khóa được liệt kê dưới dạng args, trong khi lát cắt sử dụng cách tiếp cận danh sách trắng, do đó, nó sẽ xóa tất cả các khóa không được liệt kê dưới dạng đối số. Ngoài ra còn tồn tại phiên bản bang của các phương thức đó ( except!
và slice!
) sửa đổi hàm băm đã cho nhưng giá trị trả về của chúng khác nhau cả hai đều trả về một hàm băm. Nó đại diện cho các phím bị loại bỏ slice!
và các phím được giữ cho except!
:
1.9.3p125 :011 > {:a => 1, :b => 2, :c => 3}.except!(:a)
=> {:b=>2, :c=>3}
1.9.3p125 :012 > {:a => 1, :b => 2, :c => 3}.slice!(:a)
=> {:b=>2, :c=>3}