Ruby'de bir dizede bir karakterin # oluşumunu bulma


103

Bir dizedeki bir karakterin oluşum sayısını bulmama yardımcı olabilecek Ruby yöntemini (1.9 ...) arıyorum. Sadece ilkini değil, tüm olayları arıyorum.

Örneğin: "Melanie bir çaylaktır" 'a' harfinin iki oluşumu vardır. Bunu bulmak için kullanabileceğim Ruby yöntemi ne olabilir?

Ruby-doc.org'u referans olarak kullanıyorum scanve String: classgözüme çarpan yöntem . İfadeleri anlamak benim için biraz zor, bu yüzden kavramını gerçekten anlamıyorum scan.

Düzenleme: Bunu kullanarak çözebildim scan. Bunu nasıl başardığımı bir videoda paylaştım .


2
Dizedeki oluşumların sayısını mı yoksa oluşumların dizin değerlerini mi istiyorsunuz? Kaçının genellikle yararlı olduğunu bilmek, ancak genellikle sonraki soru "neredeler?"
— The Tin Man

Yanıtlar:


143

Sadece a sayısını istiyorsanız:

puts "Melanie is a noob".count('a')  #=> 2

Daha fazla ayrıntı için Dokümanlar .


18
Ben gerçekten ben sadece :-) Yine 1 olsa sorudan dize aldı fark kadar bu cevabı hoşuma gitti.
— Hubro

neden noktalarla çalışmıyor? Örnek "voyage.localhost.com" .count ('www.') => 2. Bu nasıl olabilir?
— Gediminas

12
@Gediminas countkarakterleri sayar, dizeleri değil. "voyage.localhost.com" .count ("www.") "voyage.localhost.com" .count ("w.") ile aynıdır ve w ve iki nokta olmadığından sonuç 2'dir.
— steenslag

2
Dokümanlara bağlantı ekleme şansınız var mı?
— Fund Monica'nın Davası

2
Başlangıçta bu cevap beni oldukça şaşırttı, sonra Melanie'nin ilk örneği kullandığını gördüm. İyi cevap!
— AJFaraday

52

Daha önce sorulan bir sorudaki bu bağlantı, Ruby'de bir dizenin taranmasına yardımcı olmalıdır

tarama, bir dizedeki bir dizenin tüm oluşumlarını bir dizi olarak döndürür, bu nedenle

"Melanie is a noob".scan(/a/)

dönecek

["a","a"]

1
Bu aradığım cevap :)
— Zippie

3
scanbasit Dizelerle de çalışır, bu yüzden scan('a')de kullanılabilir
— Daniel Rikowski

1

Bunu, scanbaşka bir cevapta gösterildiği gibi bir dizeyi geçerek çözebildim .

Örneğin:

string = 'This is an example'
puts string.count('e')

Çıktılar:

2

Ayrıca, başka bir cevaptan biraz farklı olan ancak normal ifadeden kaçınmak için yardımcı olan normal ifade yerine taramayı kullanarak ve bir iğneyi geçerek olayları çekebildim.

string = 'This is an example'
puts string.scan('e')

Çıktılar:

['e','e']

Bu yöntemleri, anladıktan sonra oluşturduğum küçük bir video rehberinde daha ayrıntılı olarak inceledim .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.