Bir dizgiyi ilk n kelimesine kesmenin en iyi yolu nedir?İlk dilde sözcük dizesini kes
cevap
n = 3
str = "your long long input string or whatever"
str.split[0...n].join(' ')
=> "your long long"
str.split[0...n] # note that there are three dots, which excludes n
=> ["your", "long", "long"]
'str.split (/ \ s + /, n + 1) [0 ... n] .join ('')' performansı artırır. – sawa
bu ilk 4 kelime olsun, 3 değil. –
@ZackXu '...' aralığını kullandığınızdan emin olun. Üç nokta nth değerini içermez. –
Böyle yapabileceğini:
s = "what's the best way to truncate a ruby string to the first n words?"
n = 6
trunc = s[/(\S+\s+){#{n}}/].strip
Bir kopya yapma sakıncası yoksa.
Ayrıca Sawa's İyileştirme uygulanabilecek boşluk algılama ayarlayarak (Yani bu bir teoremi için büyük bir isim olacağını hala matematikçi olsaydı): Bir n
uğraşmak zorunda varsa
trunc = s[/(\s*\S+){#{n}}/]
o o zaman bu varyant kullanabilirsiniz s
kelimelerin sayısından daha büyük: sen n herhangi bir sayı olmak üzere str.split.first(n).join(' ')
kullanabilirsiniz
s[/(\S+(\s+)?){,#{n}}/].strip
Bir gelişme: trunc = s [/ (\ s * \ S +) {# {n}} /] '. "Strip" e ihtiyacınız yok. – sawa
@sawa: Bunu (ve 'split' yaklaşımının versiyonunu) bir cevap olarak, mevcut cevapların iyileştirilmesi ve açıklığa kavuşturmak için kullanabilirsiniz. –
@sawa ve hızlandırmayı gösteren bir kıyaslama ekleyin. . Bu durumda s [/ (? \ S + (\ s +)) {# {n}} /] şerit 'kullanabilirsiniz: –
. Orijinal dizesinde
Bitişik beyaz boşluk döndürülen dizede tek boşluk ile değiştirilir.
Örneğin, irb şunu deneyin:
>> a='apple orange pear banana pineaple grapes'
=> "apple orange pear banana pineaple grapes"
>> b=a.split.first(2).join(' ')
=> "apple orange"
Bu sözdizimi çok açıktır (o dizine göre düzenli ifade, dizi dilim kullanmaz gibi). Ruby'de program yapıyorsanız, netliğin önemli bir stilistik seçim olduğunu biliyorsunuz.
join
için bir kısaltmadır *
olduğunu Yani bu sözdizimi str.split.first(n) * ' '
(Deneyimsiz için bu kadar net, daha deyimsel) eşdeğer ve kısadır.
Ayrıca böylece aşağıdaki aynı şeyi
a.split.take(2) * ' '
o (truncate_words vardır) raylar 4,2
string_given.squish.truncate_words(number_given, omission: "")
- 1. Bir karakterin ilk ortaya çıkmasından sonra dizeyi kes
- 2. Kapsamlı dilde
- 3. socket.io istemci bağlantıyı kes
- 4. Kes() hatası - 'tatili'
- 5. Eclipse CSV İndirme verilerini kes
- 6. Sıkı bir dilde MonadFix
- 7. RabbitMQ hangi dilde yazılmıştır?
- 8. Farklı dilde charecter olsun
- 9. Bir sözcük etiketinde doğru sözcük kaydırma
- 10. regex tüm sözcük seçeneği
- 11. Baz64 dizesini
- 12. F # 'nin derleyicisi hangi dilde yazılmıştır?
- 13. Django: Birçok dilde site çalıştırma
- 14. UIActivityViewController farklı bir dilde göster
- 15. JQuery doğrulaması doğru dilde alınamıyor
- 16. socket.io: Olayı kes - 'aktarma kapat', 'istemci ad alanı kes', 'aktarım hatası' ve 'zorla kapat'
- 17. Tomcat/BlazeDS/ActiveMQ bağlantıyı kes sorunu
- 18. Kes ve etiket/sonları uzunluk çatışma
- 19. Dosyadan son baytı oku ve büyüklüğü kes
- 20. Notepad ++ Regex Bir sözcük içeren ve sözcük içermeyen satırı bul
- 21. Spesifik olmayan sözcük grupları
- 22. NSString'ten sözcük silme
- 23. Python korursak tüm sözcük
- 24. eşleşen sözcük sınırları 2.7
- 25. Raket kullanarak sözcük kapanışları
- 26. TypeScript'te "type" ayrılmış sözcük nedir?
- 27. JFileChooser "Tüm Dosyalar" dizesini yerelleştirme
- 28. Anahtar sözcük engelleme Java'daki Harita
- 29. Wordnet'te "sözcük dosyası" nasıl bulunur?
- 30. Sözdizimli döküm dizesini çifte
misiniz geliyor, bu takip edebilir yapacağını
take
yerinefirst
ait kullanabilirsiniz sadece Ruby veya Ruby on Rails kullanarak? –