Bagaimana cara membagi string yang dibatasi di Ruby dan mengubahnya menjadi sebuah array?

233

Saya punya string

"1,2,3,4"

Dan saya ingin mengubahnya menjadi sebuah array:

[1,2,3,4]

Bagaimana?

Neil Middleton
sumber
11
"1,2 | 3; 42: 4711" .scan (/ \ d + /). Peta {| i | i.to_i}
Jonas Elfström

Jawaban:

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

Atau untuk bilangan bulat:

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

Atau untuk versi ruby ​​yang lebih baru (> = 1.9 - seperti yang ditunjukkan oleh Alex):

>> "1,2,3,4".split(",").map(&:to_i)
=> [1, 2, 3, 4]
Shadwell
sumber
28
Ingat, jika Anda menggunakan> = 1.9, Anda bisa menggunakan "1,2,3,4" .split (','). Map (: to_i)
Alex Fort
7
Jika Anda menggunakan dukungan aktif yang dapat Anda lakukan: map (&: to_i)
jonnii
31

"1,2,3,4".split(",") sebagai string

"1,2,3,4".split(",").map { |s| s.to_i } sebagai bilangan bulat

Oliver N.
sumber
19

Karena String Integertanpa ruang sebagaiString

arr = "12345"

arr.split('')

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

Untuk String Integerdengan ruang sebagaiString

arr = "1 2 3 4 5"

arr.split(' ')

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

Karena String Integertanpa ruang sebagaiInteger

arr = "12345"

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

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

Untuk String

arr = "abc"

arr.split('')

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

Penjelasan :

  1. arr -> string yang akan Anda lakukan tindakan apa pun.
  2. split() -> adalah metode, yang membagi input dan menyimpannya sebagai array.
  3. ''atau ' 'atau ','-> adalah nilai, yang perlu dihapus dari string yang diberikan.
Aravin
sumber
1

cara paling sederhana untuk mengonversi string yang memiliki pembatas seperti koma adalah dengan menggunakan metode split

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

Anda dapat menemukan lebih banyak info tentang cara menggunakan metode split di ruby docs

Membagi str menjadi substring berdasarkan pembatas, mengembalikan array substring ini.

Jika pola adalah sebuah String, maka isinya digunakan sebagai pembatas saat memisahkan str. Jika pola adalah ruang tunggal, str terpecah pada spasi putih, dengan spasi kosong terdepan dan karakter spasi spasi yang berdekatan diabaikan.

Jika polanya adalah Regexp, str dibagi di mana polanya cocok. Setiap kali pola cocok dengan string panjang nol, str dibagi menjadi karakter individu. Jika pola berisi grup, masing-masing yang cocok akan dikembalikan dalam array juga.

Jika pola dihilangkan, nilai $; digunakan. Jika $; is nil (yang merupakan default), str dibagi pada whitespace seolah-olah `'ditentukan.

Jika parameter batas dihilangkan, bidang nol yang tertinggal akan ditekan. Jika batas adalah angka positif, paling banyak jumlah bidang itu akan dikembalikan (jika batas adalah 1, seluruh string dikembalikan sebagai satu-satunya entri dalam array). Jika negatif, tidak ada batasan untuk jumlah bidang yang dikembalikan, dan trailing bidang nol tidak ditekan.

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

each_charpada dasarnya tidak sama dengan split(''): Ini membagi string menjadi array karakternya.

hmmm, saya baru sadar sekarang bahwa dalam pertanyaan awal string berisi koma, jadi jawaban saya tidak terlalu membantu ;-( ..

andiba
sumber
3
dapatkah Anda mengedit jawaban untuk menjelaskan apa yang sedang Anda lakukan?
MZaragoza