Nếu a
là mảng, tôi muốn a.index(a.max)
, nhưng một cái gì đó giống Ruby hơn. Nó sẽ là hiển nhiên, nhưng tôi đang gặp khó khăn khi tìm câu trả lời ở đâu và ở nơi khác. Rõ ràng, tôi mới với Ruby.Trong Ruby, cách sạch nhất để lấy chỉ số của giá trị lớn nhất trong một mảng là gì?
Trả lời
Đối với Ruby 1.8.7 trở lên:
a.each_with_index.max[1]
Nó không có một lần lặp. Không hoàn toàn là điều ngữ nghĩa nhất bao giờ hết, nhưng nếu bạn thấy mình làm điều này rất nhiều, tôi sẽ bọc nó trong một phương thức index_of_max
.
a = [1, 4 8]
a.inject(a[0]) {|max, item| item > max ? item : max }
Ít nhất đó là Ruby-như :)
Trong ruby 1.9.2 tôi có thể làm điều này;
arr = [4, 23, 56, 7]
arr.rindex(arr.max) #=> 2
Đây là phiên bản tồi tệ hơn của giải pháp gốc không mong muốn. – MegaTom
Dưới đây là những gì tôi đang suy nghĩ để trả lời câu hỏi này:
a = (1..12).to_a.shuffle
# => [8, 11, 9, 4, 10, 7, 3, 6, 5, 12, 1, 2]
a.each_index.max_by { |i| a[i] }
# => 9
Dưới đây là một cách để có được tất cả các giá trị chỉ số của các giá trị tối đa nếu có nhiều hơn một.
Given:
> a
=> [1, 2, 3, 4, 5, 6, 7, 9, 9, 2, 3]
Bạn có thể tìm thấy những chỉ số của tất cả các giá trị max (hoặc bất kỳ giá trị nhất định) bằng cách:
> a.each_with_index.select {|e, i| e==a.max}.map &:last
=> [7, 8]
Chỉ muốn lưu ý một sự khác biệt về hành vi và hiệu suất cho một số các giải pháp ở đây. Các "buộc vi phạm" hành vi của trùng lặp yếu tố tối đa:
a = [3,1,2,3]
a.each_with_index.max[1]
# => 3
a.index(a.max)
# => 0
Ra khỏi tò mò tôi chạy chúng cả trong Benchmark.bm
(đối với a
trên):
user system total real
each_with_index.max 0.000000 0.000000 0.000000 ( 0.000011)
index.max 0.000000 0.000000 0.000000 ( 0.000003)
Sau đó, tôi tạo ra một mới a
với Array.new(10_000_000) { Random.rand }
và chạy lại thử nghiệm:
user system total real
each_with_index.max
2.790000 0.000000 2.790000 ( 2.792399)
index.max 0.470000 0.000000 0.470000 ( 0.467348)
Điều này làm tôi suy nghĩ trừ khi bạn đặc biệt cần chọn chỉ số tối đa cao hơn, a.index(a.max)
là lựa chọn tốt hơn.
- 1. Nhận giá trị chỉ mục mảng của 1000 mục lớn nhất trong một mảng bằng LINQ
- 2. Cách tìm chỉ mục của mảng có giá trị lớn nhất
- 3. Cách lấy giá trị duy nhất trong mảng đa chiều
- 4. Lấy 3 giá trị cao nhất trong danh sách mảng?
- 5. Mẫu Express/EJS bên trong, cách sạch nhất để lặp qua một mảng là gì?
- 6. Lấy chỉ số trong những yếu tố lớn nhất n trong một ma trận
- 7. Số lớn nhất và nhỏ nhất trong một mảng
- 8. Cách lấy giá trị lớn nhất của cột id duy nhất bằng cách sử dụng LINQ
- 9. Cách nhanh nhất để lấy giá trị trung bình của một tập hợp các số từ dòng lệnh là gì?
- 10. Cách tốt nhất để lấy phần phân số của phao trong PHP là gì?
- 11. PHP Lấy giá trị cao nhất từ mảng
- 12. Lấy phần tử trong mảng với giá trị lớn nhất của thuộc tính bằng cách sử dụng jQuery
- 13. Giá trị mảng duy nhất trong Mongoose
- 14. số giá trị trong một danh sách lớn hơn một số nhất định
- 15. Giá trị lớn nhất của unsigned char
- 16. Cách tốt nhất để tạo mảng bit lớn trong Lua
- 17. Làm thế nào để tìm giá trị lớn nhất và tối thiểu trong một mảng các số nguyên trong Perl?
- 18. Cách dễ nhất để lấy chìa khóa có giá trị cao nhất từ băm trong Perl là gì?
- 19. Cách tốt nhất để dọn sạch thư mục là gì?
- 20. tìm chỉ số thấp nhất của một giá trị đã cho trong một mảng được phân loại
- 21. Cách lấy giá trị trên một chỉ mục nhất định, trong danh sách python?
- 22. Tìm giá trị gần nhất và trả lại chỉ số của mảng bằng Python
- 23. Cách tốt nhất để băm url trong ruby là gì?
- 24. Cách nhanh nhất để kiểm tra xem tất cả các giá trị trong một mảng có phải là số không?
- 25. Cách tốt nhất để tạo một mảng chỉ đọc trong C# là gì?
- 26. Cách sạch nhất để tìm kiếm một mảng 2D?
- 27. Cách tốt nhất để tạo một mảng thưa thớt trong C++ là gì?
- 28. Cách tìm giá trị duy nhất trong mảng răng cưa
- 29. tìm giá trị nhỏ nhất trong một mảng float
- 30. Python: lấy vị trí của vật phẩm lớn nhất trong một mảng có nhiều mảng
Tôi nghĩ bạn đã có nó. Có gì không phải là rubylike về điều đó? – Ben
Ben, tôi đang tìm kiếm một cái gì đó như a.max_index. Đoán nó không được tích hợp. –
Thậm chí nếu hàm bạn muốn không được tích hợp, bạn vẫn có thể thêm thành viên '.max_index' vào lớp' Array'. Dưới đây là ví dụ về việc mở rộng 'Chuỗi' hoặc 'Số nguyên' với một thành viên tùy chỉnh: http://www.hawkee.com/snippet/1260/ – bta