# 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
cevap
Tabii reddetmek için yapabileceğiniz:
odd, even = list.partition &:odd?
harika - teşekkürler; ilginç sayılabilir dokümanlar üzerinde görünür - http://ruby-doc.org/core-1.9.2/Enumerable.html ama dizi değil? – house9
@ house9 Enumerable bir karışımdır, pek çok sınıf bunu kullanabilir. Hashes onları da kullanıyor. – MrDanA
Bunun nedeni, 'Numaralandır' değil, 'Array' üzerinde tanımlanmış olmasıdır. Buna * miras * denir ve sadece nesne yönelimli olmayanları değil Ruby'nin ve diğer birçok dilin temel kavramlarından biridir. –
odd = []
even = []
list = [1..20]
list.each {|x| x.odd? ? odd << x : even << x }
pguardiario dediği gibi, partition
yöntem en kestirme yoludur . Ayrıca Set#divide
kullanabilirsiniz:
require 'set'
list = (1..10).to_a
odd, even = Set.new(list).divide(&:odd?).to_a.map{|x| x.to_a}
Aşağıdaki deneyebilirsiniz:
odd,even = (0..20).group_by(&:odd?).values
p odd,even
Çıktı: yöntemlerde Dahili
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
- 1. Yakut Diziler:() (toplamak ve harita,) (seç) haritalama
- 2. hashs bu dizi (Enumerable) [Yakut, raylar]
- 3. yakut dizisi
- 4. Numpy rank 1 diziler
- 5. Yakut BigDecimal yöntemi hatası
- 6. N-enumerable?
- 7. C# dizisi içine MWarray Matlab
- 8. Bölünmüş birden diziler içine bir dizi
- 9. kthSmallest yöntemi, tamsayıların bir dizisi/alt dizisi
- 10. Karışık C++ Diziler ve C#
- 11. 2 farklı 2B dizisi üretmek için 1 işlev çağırma
- 12. SublimeText 2 Yakut biçimlendirme
- 13. MySQL CONCAT 2 satırları \ sonrasındaki 1 satırın içine \ bazen
- 14. numpy dizisi (n, 1) ve (n,)
- 15. 1 + 1/2 + 1/3 + --- + 1/n =?
- 16. MongoDB: 2 iç içe diziler
- 17. Java: Diziler ve Vektörler
- 18. Diziler dizisi üzerinde yineleme nasıl yapılır
- 19. 1 = 2
- 20. Yakut - örneğin, orada iki diziler, ve ben ikisi için yaygın değildir unsurları bulmalıyız - İki dizinin
- 21. Çok boyutlu diziler dizisi python'da birden çok diziye nasıl bölünür?
- 22. i farklı uzunluktaki 2 diziler birleştirmek istiyoruz alternatif Değerleri
- 23. Capybara Bağlantı ben bir yakut konsolunu açın ve yöntemi çalıştırırsanız
- 24. Raylar üzerinde yakut - Güncellemede PUT yöntemi ajax
- 25. yakut dizi döngü hep
- 26. Diziler dizisi için rxjs zip operatörü nasıl kullanılır?
- 27. Sınıf yöntemi, karşılık 1 (
- 28. İçiçe diziler ve ConvertTo-Json
- 29. Bir işlemde Hibernate ve JDBC
- 30. Sql sorgulama 1 saat önce seçmek için?
güzel, ama kendi yöntemi ekleme karşı olan Array'a bunu yapar mı? – MrDanA
evet, bunu eklemek için maymun yama Array hakkında düşünüyordum - Ruby bir şey zaten inşa edilmiş, ama bir şey görmedim dokümanlar – house9