Bất cứ ai có thể chỉ cho tôi cách kiểm tra xem một khóa có tồn tại trong băm hay không và nếu không thì khóa đó sẽ là giá trị mặc định. Tôi giả sử có một lớp lót bằng cách sử dụng trừ khi làm điều này nhưng tôi không chắc chắn nên sử dụng cái gì.Nếu khóa không tồn tại, hãy tạo giá trị mặc định
Trả lời
Nếu bạn không cần phải lưu trữ giá trị mặc định vào băm bạn có thể sử dụng phương pháp Hash#fetch
:
hash = {}
hash.fetch(:some_key, 'default-value') # => 'default-value'
p hash
# => {}
Nếu bạn cần thêm vào lưu trữ giá trị mặc định của bạn mỗi khi bạn truy cập không tồn tại quan trọng và bạn đang là người khởi tạo hash bạn có thể làm điều đó bằng Hash#new
với một khối:
hash = Hash.new { |hash, key| hash[key] = 'default-value' }
hash[:a] = 'foo'
p hash[:b]
# => 'default-value'
p hash
# => { :a => 'foo', :b => 'default-value' }
Constructor của lớp hash chấp nhận giá trị mặc định, tương tự sẽ được trả lại nếu khóa khớp không được tìm thấy.
h = Hash.new("default")
h.has_key?("jake")
=> false
h["jake"]
=> "default"
h["jake"] = "26"
h.has_key?("jake")
=> true
Nếu bạn đã có một hash, bạn có thể làm điều này:
h.fetch(key, "default value")
Hoặc bạn khai thác thực tế là một tổ chức phi hiện chìa khóa sẽ trở lại nil
:
h[key] || "default value"
Để tạo băm với giá trị mặc định nó phụ thuộc vào những gì bạn muốn làm chính xác.
độc lập quan trọng và sẽ không được lưu trữ:
h = Hash.new("foo") h[1] #=> "foo" h #=> {}
Phụ thuộc vào chìa khóa và sẽ được lưu trữ:
h = Hash.new { |h, k| h[k] = k * k } h[2] #=> 4 h #=> {2=>4}
Nếu bạn đang lưu trữ một giá trị mặc định có thể là 0 và bạn cần tính toán tại thời gian lưu trữ:
hash = {}
...
hash.fetch(key) {|k| hash[k] = calc_default()}
Nếu bạn muốn gán giá trị mặc định để băm nếu chìa khóa không tồn tại (chưa), bạn có thể sử dụng ||=
điều hành, ví dụ:
h = {some_key: 'non_default_value'}
value = h[:some_key] ||= 'default_value'
value2 = h[:non_existing_key] ||= 'default_value'
value
sẽ được chỉ định 'non_default_value'
và value2
sẽ được gán 'default_value'
Sau những bài tập h
sẽ có non_existing_key
thiết lập để 'default_value'
:
{:some_key=>"non_default_value", :non_existing_key=>"default_value"}
- 1. Nếu một thư mục không tồn tại, hãy tạo nó
- 2. Làm cách nào để kiểm tra NẾU Ràng buộc giá trị mặc định tồn tại không tồn tại?
- 3. Postgresql, cập nhật nếu hàng có một số giá trị duy nhất tồn tại, hãy chèn
- 4. Từ điển Python trả về khóa yêu cầu nếu giá trị không tồn tại
- 5. Cách gán giá trị mặc định nếu giá trị hiện tại bằng 0 trong Clojure?
- 6. Tạo nếu không tồn tại
- 7. Python: Gán Giá trị nếu Không tồn tại
- 8. PHP: append để đánh giá cao nếu chìa khóa đã tồn tại, nếu không muốn nói thêm khóa
- 9. MySql: nếu giá trị tồn tại UPDATE khác INSERT
- 10. Kiểm tra xem khóa có tồn tại trong từ điển hay không. Nếu không, hãy thêm nó
- 11. MySQL: Chèn nếu khóa ngoài tồn tại
- 12. Mảng PHP với giá trị mặc định cho các chỉ mục không tồn tại
- 13. Đặt giá trị mặc định cho thuộc tính khóa ngoài
- 14. Kiểm tra nếu giá trị tồn tại trong Postgres mảng
- 15. Giá trị mặc định cho một trường nếu không có giá trị mặc định nào được cung cấp?
- 16. kiểm tra nếu giá trị đã tồn tại
- 17. Giá trị kiểm tra nếu tồn tại trong cột
- 18. Tạo tệp nếu tệp không tồn tại
- 19. PostgreSQL tạo bảng nếu không tồn tại
- 20. Nếu điều kiện sai thì hãy ngăn chặn mặc định
- 21. C# Khởi tạo mảng - với giá trị không mặc định
- 22. Mongoid - Quản lý mảng? chèn giá trị duy nhất, loại bỏ giá trị nếu tồn tại?
- 23. DependencyProperty Giá trị mặc định
- 24. Xác định nếu một giá trị tồn tại trong một mảng băm
- 25. Mẫu Angularjs Giá trị mặc định nếu Ràng buộc Null/Không xác định (Có bộ lọc)
- 26. Chỉ tạo một tệp nếu không tồn tại
- 27. Mongoose.connect có tạo cơ sở dữ liệu Mongo theo mặc định nếu nó không tồn tại không?
- 28. giá trị chung Mặc định
- 29. Mã hóa khóa-giá trị iPhone - kiểm tra sự tồn tại của khóa
- 30. Kiểm tra xem có tồn tại một hàng hay không, nếu không hãy chèn
Sử dụng h [key] || "giá trị mặc định" không được lưu, nếu đã có sai trong đó nó sẽ bị ghi đè – Sebastian
Đó là lý do tại sao tôi liệt kê nó là một trong nhiều khả năng. Nói chung mọi người có ý tưởng về giá trị của băm của họ sẽ như thế nào, nếu bạn biết bạn sẽ không lưu các giá trị boolean, đó là một cách tiếp cận hoàn toàn tốt đẹp. –