# this code works
list = (0..20).to_a
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
odd = list.select { |x| x.odd? }
# => [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
list.reject! { |x| x.odd? }
# => [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# but can i emulate this type of functionality with an enumerable method?
set = [1,5,10]
# => [1, 5, 10]
one, five, ten = set
# => [1, 5, 10]
one
# => 1
five
# => 5
ten
# => 10
# ------------------------------------------------
# method I am looking for ?
list = (0..20).to_a
odd, even = list.select_with_reject { |x| x.odd? }
# put the matching items into the first variable
# and the non-matching into the second
Odpowiedz
Oczywiście, można zrobić:
odd, even = list.partition &:odd?
niesamowite - dziękuję; ciekawe, pojawia się na przeliczalnych dokumentach - http://ruby-doc.org/core-1.9.2/Enumerable.html, ale nie na tablicy? – house9
@ house9 Enumerable to mixin, więc wiele klas może z niego korzystać. Hashe też z nich korzystają. – MrDanA
Dzieje się tak dlatego, że jest zdefiniowany w "Zmiennej", ale nie w "Tablicy". Nazywa się to * dziedziczeniem * i jest jedną z podstawowych koncepcji Ruby i wielu innych języków, nie tylko tych zorientowanych obiektowo. –
odd = []
even = []
list = [1..20]
list.each {|x| x.odd? ? odd << x : even << x }
Jak pguardiario powiedział, metoda partition
jest najbardziej bezpośredni sposób . Można również użyć Set#divide
:
require 'set'
list = (1..10).to_a
odd, even = Set.new(list).divide(&:odd?).to_a.map{|x| x.to_a}
można spróbować poniżej:
odd,even = (0..20).group_by(&:odd?).values
p odd,even
wyjściowa:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
- 1. rubin tablica Najdziwniejsze (nieskończony array)
- 2. Dzielenie tablicą na 2 tablicach C#
- 3. PHP Array i ArrayObject
- 4. Kawałki funkcji na tablicach Numpy
- 5. Jak wybrać 1 losową liczbę z 2 różnych zakresów liczb?
- 6. Metoda klonu array() powoduje NoClassDefFoundError: Array
- 7. Czy istnieje idiomatyczny sposób działania na 2 tablicach w Ruby?
- 8. Konwertuj Array String na Int Array Swift 2?
- 9. problemy RVM instalacja rubin 2
- 10. Jak sortować unsort: array (1) .sort transform array (2) -> array (3) .unsort (odwrócona tablica (1) .sort
- 11. Szybkie i wydajne obliczenia na tablicach
- 12. Ruby przeliczalny odwrotnej wykryć
- 13. najlepszy rubin na szynach cms
- 14. Metoda Domyślna wartość array parametr
- 15. Julia: Przypisanie w tablicach
- 16. Pętla PHP w wielowymiarowych tablicach i zmieniaj wartości
- 17. Dodaj do wartości Array (+1)
- 18. Oblicz statystyki na tablicach
- 19. ArgumentError: niepoprawna liczba argumentów (1 na 2)
- 20. PHP: jak wypełnić tablicę z kluczami i wartościami więc 1 = 1, 2 = 2, 3 = 3 itd
- 21. Dlaczego popowa metoda Array nie ma wykrzyknika?
- 22. Dlaczego (lista + 1 2) odpowiada ('(+ 1 2) 1 2) w Common Lisp
- 23. Java 8 Strumień i działanie na tablicach
- 24. php json_encode nie działa częściowo na tablicach
- 25. Angular 2, ustaw domyślną wartość, aby wybrać opcję
- 26. Errata w oryginalnym artykule na tablicach przyrostków?
- 27. Lambda na prymitywnych tablicach
- 28. Przekształć [: jeden, 1,: dwa, 2] w {: jeden => 1,: dwa => 2} w Ruby
- 29. Operator [] Przeciążanie w wielowymiarowych tablicach C++
- 30. catch on swipe, aby odrzucić zdarzenie
Zbudowany w metodach są ładne, ale jesteś w przeciwieństwie do dodawania własnych metody do "Tablicy", która to zrobi? – MrDanA
tak, myślałem o tym, że małpa łata Arraya, aby go dodać - wygląda na to, że coś, co Ruby mógł już wbudować, ale nic nie zobaczyło w dokumentach: – house9