Sınırlandırılmış bir dizeyi Ruby'de nasıl bölerim ve bir diziye nasıl dönüştürebilirim?


Yanıtlar:


412
>> "1,2,3,4".split(",")
=> ["1", "2", "3", "4"]

Veya tamsayılar için:

>> "1,2,3,4".split(",").map { |s| s.to_i }
=> [1, 2, 3, 4]

Veya ruby'nin sonraki sürümleri için (> = 1.9 - Alex'in işaret ettiği gibi):

>> "1,2,3,4".split(",").map(&:to_i)
=> [1, 2, 3, 4]

28
Unutmayın,> = 1.9 kullanıyorsanız, sadece "1,2,3,4" .split (','). Map (: to_i)
Alex Fort

7
Aktif destek kullanıyorsanız şunları yapabilirsiniz: map (&: to_i)
jonnii

31

"1,2,3,4".split(",") dize olarak

"1,2,3,4".split(",").map { |s| s.to_i } tamsayı olarak


19

İçin String Integerboşluk bırakmadan olarakString

arr = "12345"

arr.split('')

output: ["1","2","3","4","5"]

İçin String Integerboşluk olarak birlikteString

arr = "1 2 3 4 5"

arr.split(' ')

output: ["1","2","3","4","5"]

İçin String Integerboşluk bırakmadan olarakInteger

arr = "12345"

arr.split('').map(&:to_i)

output: [1,2,3,4,5]

Dize için

arr = "abc"

arr.split('')

output: ["a","b","c"]

Açıklama :

  1. arr -> herhangi bir eylem gerçekleştireceğiniz dize.
  2. split() -> girişi bölen ve dizi olarak saklayan bir yöntemdir.
  3. ''veya ' 'veya ','->, verilen dizeden kaldırılması gereken bir değerdir.

1

virgül gibi bir sınırlayıcı içeren bir dizgeyi dönüştürmenin en basit yolu sadece split yöntemini kullanmaktır

"1,2,3,4".split(',') # "1", "2", "3", "4"]

ruby docs'ta split yönteminin nasıl kullanılacağı hakkında daha fazla bilgi bulabilirsiniz

Str'yi alt dizelere ayırır ve bu alt dizelerin bir dizisini döndürür.

Desen bir Dize ise, str'yi bölerken içeriği sınırlayıcı olarak kullanılır. Desen tek bir boşluksa str, boşluk üzerinde bölünür ve önde gelen boşluk ve bitişik boşluk karakterleri yoksayılır.

Desen bir Regexp ise str, desenin eşleştiği yere bölünür. Desen sıfır uzunluklu bir dizeyle eşleştiğinde, str tek tek karakterlere bölünür. Kalıp gruplar içeriyorsa, ilgili eşleşmeler dizide de döndürülür.

Desen atlanırsa, $ değeri; kullanıldı. Eğer $; nil (varsayılan değerdir), str boşlukta `` belirtilmiş gibi bölünür.

Limit parametresi atlanırsa, sondaki boş alanlar bastırılır. Sınır pozitif bir sayıysa, en fazla bu alan sayısı döndürülür (sınır 1 ise, dizenin tamamı bir dizideki tek girdi olarak döndürülür). Negatifse, döndürülen alan sayısı için bir sınır yoktur ve sondaki boş alanlar bastırılmaz.


-1
"12345".each_char.map(&:to_i)

each_chartemel olarak aynıdır split(''): Bir dizeyi karakter dizisine böler.

hmmm, şimdi sadece orijinal soruda dize virgül içerdiğini anlıyorum, bu yüzden cevabım gerçekten yararlı değil ;-( ..


3
ne yaptığınızı açıklamak için cevabınızı düzenleyebilir misiniz?
MZaragoza
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.