Chcę zrobić coś prostego i prostego, jak min(5,10)
lub Math.max(4,7)
. Czy są jakieś funkcje tego efektu w Ruby?Jak znaleźć min/max z Ruby?
Odpowiedz
Można zrobić
[5, 10].min
lub
[4, 7].max
Pochodzą one z Enumerable module, więc wszystko, co zawiera Enumerable
będą miały te metody dostępne.
EDIT
@nicholasklick wspomina inną opcję, Enumerable#minmax
, ale tym razem powracającego tablicę [min, max]
.
[4, 7].minmax
=> [4, 7]
Nie wydaje się bardzo interesujący z tylko 2 wartości w początkowym tablicy, więc
[4, 5, 7, 10].minmax
=> [4, 10]
Można użyć
[5,10].min
lub
[4,7].max
To metoda dla tablic.
Technicznie jest to metoda dla enumerables, a nie array. – meagar
Oprócz dostarczonych odpowiedzi, jeśli chcesz przekonwertować Enumerable#max do max metody, która może wywołać szereg zmiennych lub argumentów, podobnie jak w innych językach programowania, można napisać:
def max(*values)
values.max
end
Output:
max(7, 1234, 9, -78, 156)
=> 1234
tEGO nadużywa właściwości operatora ikona celu utworzenia obiektu tablicy zawierającej wszystkie argumenty świadczone lub pustego przedmiotu tablicy jeśli nie argumenty były. W tym ostatnim przypadku metoda zwróci nil
, ponieważ wywołanie Enumerable#max na pustym obiekcie tablicy zwróci nil
.
Jeśli chcesz zdefiniować tę metodę na module Math, to powinno załatwić sprawę:
module Math
def self.max(*values)
values.max
end
end
Zauważ, że Enumerable.max jest przynajmniej two times slower compared to the ternary operator (?:
). Zobacz Dave Morse's answer, aby uzyskać prostszą i szybszą metodę.
Jeśli trzeba znaleźć max/min mieszania, można użyć #max_by
lub #min_by
people = {'joe' => 21, 'bill' => 35, 'sally' => 24}
people.min_by { |name, age| age } #=> ["joe", 21]
people.max_by { |name, age| age } #=> ["bill", 35]
Wszystkie te wyniki generują śmieci gorliwy próbując obsługiwać więcej niż dwa argumenty. Byłbym ciekawy, jak działają, w porównaniu do dobrego "ol:
def max (a,b)
a>b ? a : b
end
który jest oficjalną moją oficjalną odpowiedzią na twoje pytanie.:)
Są pewne pogłoski, że Ruby 2.4 optymalizuje '[a, b] .max', ale nadal nie jest jasne, czy jest szybsze niż powyższa implementacja. http://blog.bigbinary.com/2016/11/17/ruby-2-4-implements-array-min-and-max.html –
- 1. Normalizacja MinMax w scala
- 2. Jak znaleźć tłumacza ruby?
- 3. Ruby: Jak znaleźć indeks minimalnego elementu tablicy?
- 4. Jak znaleźć pamięć używaną przez obiekt ruby?
- 5. Jak znaleźć "niezbędne" metody zapewniania interfejsu z mieszankami Ruby?
- 6. Nie można znaleźć pliku ruby.
- 7. Obserwowanie dziwnego zachowania za pomocą "auto" i std :: minmax
- 8. Ruby: Nie można znaleźć programu RedCloth-4.2.9
- 9. Jak znaleźć nieaktualne biblioteki z sbt?
- 10. Jak znaleźć maksymalny atrybut dla rekordów w ruby?
- 11. ruby na szynach ails z nie można znaleźć pliku "jquery.ui.all"
- 12. Jak znaleźć wolny port serwera TCP za pomocą Ruby?
- 13. Jak znaleźć znaczenie operatorów Ruby bez użycia tekstu?
- 14. Jak znaleźć bezwzględną ścieżkę aktualnie uruchomionego skryptu Ruby?
- 15. Jak znaleźć cały nieużywany kod w Ruby on Rails
- 16. Jak programistycznie znaleźć nazwę obszaru/modułu w Ruby on Rails?
- 17. Jak znaleźć indeks podciągu?
- 18. Jak uruchomić kod Ruby z terminala?
- 19. Jak zaktualizować Ruby z Homebrew?
- 20. Jak wyodrębnić archiwum .rar z Ruby?
- 21. Ruby: Jak pogrupować tablicę Ruby?
- 22. Jak znaleźć plik z javascript?
- 23. Jak znaleźć Waldo z R?
- 24. Jak manipulować DOM z Ruby na szynach
- 25. Jak radzić sobie z tablicami ruby w klejnocie ruby ffi?
- 26. ruby: jak znaleźć elementy nieunikalne w tablicy i wydrukować je z liczbą wystąpień?
- 27. Jak automatycznie znaleźć lokalizację użytkownika?
- 28. Ruby: w jaki sposób rekursywnie znaleźć i usunąć puste katalogi?
- 29. Gdzie można znaleźć dokumentację dla Selenium WebDriver w Ruby
- 30. Gdzie mogę znaleźć zaawansowane samouczki Ruby on Rails?
To takie piękne! – Ziggy
Lub po prostu wykonaj http://www.ruby-doc.org/core-2.0/Enumerable.html#method-i-minmax – nicholasklick
Dzięki @nicholasklick, właśnie zaktualizowałem moją odpowiedź. Nawet nie wiedział, że istnieje! – theIV