Ruby kullanarak bir dizedeki ilk karakteri nasıl elde edebilirim?
Nihayetinde yaptığım şey birinin soyadını almak ve ondan bir baş harf çıkarmak.
Yani dizi "Smith" ise sadece "S" istiyorum.
"Smith".chr #=> "S"
Ruby kullanarak bir dizedeki ilk karakteri nasıl elde edebilirim?
Nihayetinde yaptığım şey birinin soyadını almak ve ondan bir baş harf çıkarmak.
Yani dizi "Smith" ise sadece "S" istiyorum.
"Smith".chr #=> "S"
Yanıtlar:
Kodunuzu daha okunaklı hale getirmek için Ruby'nin açık sınıflarını kullanabilirsiniz. Örneğin, bu:
class String
def initial
self[0,1]
end
end
initialyöntemi herhangi bir dizede kullanmanıza izin verir . Yani aşağıdaki değişkenlere sahipseniz:
last_name = "Smith"
first_name = "John"
O zaman baş harflerini çok temiz ve okunaklı bir şekilde alabilirsiniz:
puts first_name.initial # prints J
puts last_name.initial # prints S
Burada bahsedilen diğer yöntem Ruby 1.8'de çalışmıyor (zaten 1.8 kullanıyor olmanız gerekmiyor! - ama bu cevap gönderildiğinde hala oldukça yaygındı):
puts 'Smith'[0] # prints 83
Elbette, düzenli olarak yapmıyorsanız, yöntemi tanımlamak aşırı olabilir ve bunu doğrudan yapabilirsiniz:
puts last_name[0,1]
Ruby'nin yeni bir sürümünü (1.9.0 veya üstü) kullanıyorsanız, aşağıdakiler çalışmalıdır:
'Smith'[0] # => 'S'
1.9.0+ veya 1.8.7 kullanıyorsanız, aşağıdakiler çalışmalıdır:
'Smith'.chars.first # => 'S'
1.8.7'den daha eski bir sürüm kullanıyorsanız, bu çalışmalıdır:
'Smith'.split(//).first # => 'S'
Not 'Smith'[0,1]yok değil 1.8 üzerinde çalışmak, bu olacak değil sadece size ilk verecektir size ilk karakter vermek bayt .
"Smith"[0]'S' karakterinin tamsayı değerini döndürür. Her iki versiyon da itaat eder "Smith"[0,1] == "S".
"Smith"[0,1]1.8'de çalışıyor (ASCII varsayılarak). İstekte bulunan kişi ve bu sorudan öğrenmek isteyen diğer herkes hakkında neden bu kadar çok şey düşündüğünüzden emin değilim. Örneğin, Mac OS X Ruby 1.8 ile birlikte gelir, bu nedenle bu kullanıcılar için kurulum gerekmez.
"Smith"[0..0]
hem yakut 1.8 hem de yakut 1.9'da çalışır.
Bütünlük uğruna, Ruby 1.9 String # chr bir dizenin ilk karakterini döndürdüğünden beri. Hala 2.0 ve 2.1 sürümlerinde mevcuttur.
"Smith".chr #=> "S"
MRI 1.8.7 veya üzerinde:
'foobarbaz'.each_char.first
Bunu dene:
>> a = "Smith"
>> a[0]
=> "S"
VEYA
>> "Smith".chr
#=> "S"
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
"Smith"[0]'S' karakterinin tamsayı değerini döndürür. Her iki versiyon da itaat eder "Smith"[0,1] == "S".
"Smith"[0] == ?Shem Ruby 1.8 hem de 1.9 için doğru olduğunu eklemeliyim
Ruby'de 1.9'dan önceki sinir bozucu tasarım seçimi nedeniyle - ilk karakterin karakter kodunusome_string[0] döndürür - bunu yazmanın en taşınabilir yolu , 0 dizininde 1 karakter uzunluğunda bir alt dize almasını söylemektir.some_string[0,1]
Ayrıca kullanabilirsiniz truncate
> 'Smith'.truncate(1, omission: '')
#=> "S"
veya ek biçimlendirme için:
> 'Smith'.truncate(4)
#=> "S..."
> 'Smith'.truncate(2, omission: '.')
#=> "S."
Bu yöntemlerden herhangi biri işe yarayacaktır:
name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S
.sonra bununla çalışmayacaktır name. Ve sonuncusu, kaldırsanız bile anlamsızdır ., çünkü aynı şeyi yapmak için iki farklı yöntem kullanıyor - [0] ve chr() .
'Smith'.first