Array Ruby (Array)
Susun atur Ruby ialah koleksi tersusun diindeks integer bagi sebarang objek. Setiap elemen dalam tatasusunan dikaitkan dengan indeks dan boleh diambil melalui indeks.
Indeks tatasusunan bermula pada 0, sama seperti dalam C atau Java. Indeks negatif dikira relatif kepada penghujung tatasusunan, iaitu indeks -1 mewakili elemen terakhir dalam tatasusunan, -2 mewakili elemen kedua hingga terakhir dalam tatasusunan, dan seterusnya.
Tatasusunan Ruby boleh menyimpan objek seperti String, Integer, Fixnum, Hash, Simbol dan juga objek Tatasusunan lain.
Tatasusunan Ruby tidak memerlukan saiz yang ditentukan, tatasusunan Ruby berkembang secara automatik apabila elemen ditambahkan pada tatasusunan.
Mencipta Tatasusunan
Terdapat banyak cara untuk mencipta atau memulakan tatasusunan. Satu cara ialah melalui kaedah kelas baharu:
names = Array.new
Anda boleh menetapkan saiz tatasusunan semasa menciptanya:
names = Array.new(20)
arraynama Saiz atau panjang ialah 20 unsur. Anda boleh menggunakan kaedah saiz atau panjang untuk mengembalikan saiz tatasusunan:
#!/usr/bin/ruby names = Array.new(20) puts names.size # 返回 20 puts names.length # 返回 20
Hasil keluaran contoh di atas ialah:
20 20
Anda boleh berikan setiap elemen dalam tugasan Elemen tatasusunan, seperti ditunjukkan di bawah:
#!/usr/bin/ruby names = Array.new(4, "mac") puts "#{names}"
Hasil keluaran contoh di atas ialah:
["mac", "mac", "mac", "mac"]
Anda juga boleh menggunakan blok dengan baharu, setiap elemen Gunakan hasil pengiraan dalam blok untuk mengisi:
#!/usr/bin/ruby nums = Array.new(10) { |e| e = e * 2 } puts "#{nums}"
Keluaran contoh di atas ialah:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Ada satu lagi kaedah untuk tatasusunan, [], Seperti yang ditunjukkan di bawah:
nums = Array.[](1, 2, 3, 4,5)
Satu lagi bentuk penciptaan tatasusunan adalah seperti berikut:
nums = Array[1, 2, 3, 4,5]
Dalam modul teras Ruby anda boleh mempunyai kaedah Tatasusunan yang hanya menerima satu parameter , yang menggunakan julat Cipta tatasusunan nombor sebagai parameter:
#!/usr/bin/ruby digits = Array(0..9) puts "#{digits}"
Keluaran contoh di atas ialah:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Kaedah terbina dalam tatasusunan
Kami memerlukan contoh objek Array untuk memanggil kaedah Array. Begini cara untuk mencipta contoh objek Tatasusunan:
Array.[](...) [or] Array[...] [or] [...]
Ini akan mengembalikan tatasusunan baharu yang diisi dengan objek yang diberikan. Sekarang, menggunakan objek yang dicipta, kita boleh memanggil mana-mana kaedah yang tersedia. Contohnya:
#!/usr/bin/ruby digits = Array(0..9) num = digits.at(6) puts "#{num}"
Hasil keluaran contoh di atas ialah:
6
Berikut ialah kaedah tatasusunan awam (dengan mengandaikan tatasusunan ialah objek Tatasusunan):
Nombor siri | Kaedah & Penerangan |
---|---|
1 | array & other_array Mengembalikan tatasusunan baharu yang mengandungi unsur biasa dalam kedua-dua tatasusunan tanpa pendua. |
2 | tatasusunan * int [atau] tatasusunan * str Mengembalikan tatasusunan baharu, tatasusunan baharu disambungkan oleh int daripada diri Salinan dicipta. Dengan parameter String, bersamaan dengan self.join(str). |
3 | array + other_array mengembalikan tatasusunan baharu yang dicipta dengan menggabungkan dua tatasusunan untuk menghasilkan tatasusunan ketiga. |
4 | array - other_array Mengembalikan tatasusunan baharu yang dialih keluar daripada tatasusunan awal dalam array_lain Salinan item yang muncul. |
5 | str <=> other_str Bandingkan str dengan other_str dan kembalikan -1 (kurang daripada), 0 ( sama dengan) atau 1 (lebih besar daripada). Perbandingan adalah sensitif huruf besar. |
6 | tatasusunan_lain Dengan menambah tatasusunan_lain pada tatasusunan, alih keluar pendua dan kembalikan tatasusunan baharu. |
7 | tatasusunan << obj Menambahkan objek yang diberi pada penghujung tatasusunan. Ungkapan mengembalikan tatasusunan itu sendiri, jadi beberapa penambahan boleh dirantai bersama. |
8 | array <=> other_array Mengembalikan integer jika array kurang daripada, sama dengan atau lebih besar daripada other_array (- 1, 0 atau +1). |
9 | array == other_array Jika dua tatasusunan mengandungi bilangan elemen yang sama, dan setiap elemen adalah sama dengan lain Jika elemen yang sepadan dalam tatasusunan adalah sama (mengikut Object.==), maka kedua-dua tatasusunan adalah sama. |
10 | tatasusunan[indeks] [atau] tatasusunan[mula, panjang] [atau] tatasusunan[julat] [atau] tatasusunan. slice(index) [atau] array.slice(start, length) [or] array.slice(julat) Mengembalikan elemen dengan indeks indeks, atau mengembalikan elemen dari mula memulakan subarray sehingga panjang elemen, atau mengembalikan subarray yang ditentukan oleh julat. Indeks negatif dikira dari penghujung tatasusunan (-1 ialah elemen terakhir). Jika indeks (atau indeks permulaan) berada di luar julat, kembalikan tiada. |
11 | array[index] = obj [atau] array[start, length] = obj atau an_array atau nil [atau] array[julat] = obj atau an_array atau nil Menetapkan elemen dengan indeks indeks, atau menggantikan subarray bermula dari mula hingga panjang elemen, atau menggantikan subarray yang ditentukan oleh julat tatasusunan. Jika indeks lebih besar daripada kapasiti semasa tatasusunan, tatasusunan akan berkembang secara automatik. Indeks negatif dikira dari penghujung tatasusunan. Jika panjang ialah sifar kemudian masukkan elemen. Jika nil digunakan dalam bentuk kedua atau ketiga, elemen itu dikeluarkan daripada diri. |
12 | array.abbrev(pattern = nil) dikira secara eksplisit untuk rentetan dalam self himpunan singkatan. Jika anda melepasi corak atau rentetan, hanya kes di mana rentetan itu sepadan dengan corak atau bermula dengan rentetan itu dipertimbangkan. |
13 | array.assoc(obj) Cari tatasusunan yang elemennya juga tatasusunan replace obj Membandingkan dengan elemen pertama setiap tatasusunan yang terkandung. Mengembalikan tatasusunan pertama yang mengandungi jika padanan ditemui atau tiada jika tiada padanan ditemui. |
14 | array.at(index) Mengembalikan elemen dengan indeks indeks. Indeks negatif dikira dari penghujung diri. Mengembalikan sifar jika indeks berada di luar julat. |
15 | array.clear Mengalih keluar semua elemen daripada tatasusunan. |
16 | array.collect { |item| block } [atau] array.map { |item|blok } Panggil sekat sekali untuk setiap elemen dalam diri. Buat tatasusunan baharu yang mengandungi nilai yang dikembalikan mengikut blok. |
17 | susun.kumpul! { |item|blok } [atau] susun.peta! >Panggilan sekat sekali untuk setiap elemen dalam diri, menggantikan elemen dengan nilai yang dikembalikan oleh sekat. |
array.compact mengembalikan salinan diri dengan semua dialih keluar tiada elemen. | |
array.compact!Mengalih keluar semua nil elemen daripada tatasusunan. Jika tiada perubahan, kembalikan tiada. | |
array.concat(other_array)Tambahkan elemen dalam other_array ke self. | |
array.delete(obj) [atau] array.delete(obj) { block } Dari Padamkan item yang sama dengan obj daripada diri. Jika tiada kesamaan ditemui, nihil dikembalikan. Jika tiada kesamaan ditemui dan kod pilihan blok diberikan, hasil blok dikembalikan. | |
array.delete_at(index)Padam elemen pada indeks yang ditentukan dan kembalikan unsur. Jika indeks berada di luar julat, nihil dikembalikan. | |
array.delete_if { |item| block }Apabila block adalah benar, padam Setiap unsur diri. | |
tatasusunan.setiap { |item| blok }Memanggil sekat sekali untuk setiap elemen dalam diri, memberikan elemen itu sebagai hujah. | |
25 | array.each_index { |index| block } Sama seperti Array#each, tetapi melepasi elemen indeks bukannya melepasi elemen itu sendiri. |
26 | tatasusunan.kosong? Mengembalikan benar jika tatasusunan itu sendiri tidak mengandungi unsur. |
27 | array.eql?(other) if array dan lain ialah objek yang sama, atau dua tatasusunan mempunyai kandungan yang sama, maka benar dikembalikan. |
28 | array.fetch(index) [atau] array.fetch(index, default) [or] array. fetch(index) { |index|. blok } Cuba kembalikan elemen pada kedudukan indeks. Jika indeks berada di luar tatasusunan, borang pertama akan membuang pengecualian IndexError, borang kedua akan mengembalikan lalai dan borang ketiga akan mengembalikan panggilan sekat melepasi nilai indeks. Kiraan indeks negatif dari penghujung tatasusunan. |
29 | array.fill(obj) [atau] array.fill(obj, mula [, length]) [atau] array.fill(obj, julat) [atau] array.fill { |index| block } [atau] array.fill(start [, length] ) { |index|blok } [atau] array.fill(julat) { |index|blok } Tiga borang sebelumnya menetapkan elemen diri kepada obj. Bermula dengan nihil adalah bersamaan dengan sifar. Panjang nihil bersamaan dengan panjang diri.. Tiga borang terakhir mengisi tatasusunan dengan nilai blok . blok diluluskan dengan indeks mutlak setiap elemen diisi. |
30 | array.first [atau] array.first(n) Mengembalikan elemen pertama tatasusunan Atau elemen n pertama. Jika tatasusunan kosong, bentuk pertama mengembalikan nihil, dan bentuk kedua mengembalikan tatasusunan kosong. |
31 | array.flatten Mengembalikan tatasusunan baharu, iaitu tatasusunan leper satu dimensi (secara rekursif ). |
32 | susun.ratakan! Ratakan susun. Jika tiada perubahan, kembalikan tiada. (Array tidak mengandungi subaray.) |
33 | array.beku? jika array dibekukan ( atau dibekukan sementara semasa pengisihan), ia kembali benar. |
34 | array.hash Mengira kod cincang tatasusunan. Dua tatasusunan dengan kandungan yang sama akan mempunyai kod cincang yang sama. |
35 | array.include?(obj) Jika diri mengandungi obj, ia mengembalikan benar, jika tidak ia mengembalikan palsu. |
36 | array.index(obj) Mengembalikan objek pertama dalam diri yang sama dengan obj indeks. Mengembalikan tiada jika tiada padanan ditemui. |
37 | array.indexes(i1, i2, ... iN) [atau] array.indices(i1, i2, . ..iN) Kaedah ini ditamatkan dalam versi terkini Ruby, jadi gunakan Array#values_at sebaliknya. |
38 | array.indeks(i1, i2, ... iN) [atau] array.indexes(i1, i2, . .. iN) Kaedah ini ditamatkan dalam versi Ruby terbaharu, jadi gunakan Array#values_at sebagai gantinya. |
39 | array.insert(index, obj...) pada index yang diberikan nilai yang diberikan sebelum elemen, indeks boleh menjadi nilai negatif. |
40 | array.inspect Mencipta versi boleh cetak tatasusunan. |
41 | array.join(sep=$,) Mengembalikan rentetan dengan menukar setiap elemen tatasusunan ialah rentetan dan dibuat menggunakan pemisah sep. |
42 | array.last [or] array.last(n) mengembalikan yang terakhir diri unsur. Borang pertama mengembalikan nihil jika tatasusunan adalah null. |
43 | array.length Mengembalikan bilangan elemen dalam diri. Mungkin sifar. |
44 | array.map { |item| block } [atau] array.collect { |item|blok } Panggil sekat sekali untuk setiap elemen diri. Buat tatasusunan baharu yang mengandungi nilai yang dikembalikan mengikut blok. |
45 | tatasusunan.peta! > Panggil sekat sekali untuk setiap elemen tatasusunan, menggantikan elemen dengan nilai yang dikembalikan oleh blok. |
array.nitems | Mengembalikan bilangan elemen bukan nol dalam diri . Mungkin sifar. |
array.pack(aTemplateString) | Mengikut arahan dalam aTemplateString, mampatkan kandungan tatasusunan menjadi binari urutan. Arahan A, a, dan Z boleh diikuti dengan nombor yang menunjukkan lebar medan hasil. Arahan yang selebihnya juga boleh mempunyai nombor yang menunjukkan bilangan elemen tatasusunan yang hendak ditukar. Jika nombor itu ialah asterisk (*), semua elemen tatasusunan yang tinggal akan ditukar. Sebarang arahan boleh diikuti dengan garis bawah (_), yang menunjukkan bahawa jenis yang ditentukan menggunakan saiz asli platform asas, jika tidak saiz bebas platform yang konsisten digunakan. Ruang putih diabaikan dalam rentetan templat. |
array.pop | Mengalih keluar elemen terakhir daripada array dan mengembalikan elemen itu . Mengembalikan tiada jika tatasusunan kosong. |
array.push(obj, ...) | Menambahkan obj yang diberi pada penghujung tatasusunan. Ungkapan mengembalikan tatasusunan itu sendiri, jadi beberapa penambahan boleh dirantai bersama. |
array.rassoc(key) | Cari tatasusunan yang elemennya juga tatasusunan, gunakan == untuk meletakkan kunci dibandingkan dengan elemen kedua setiap tatasusunan yang terkandung. Jika terdapat padanan maka tatasusunan mengandungi pertama dikembalikan. |
tatasusunan.tolak { |item| blok } | Mengembalikan tatasusunan baharu yang mengandungi item tatasusunan apabila blok tidak benar. |
52 | tatasusunan.tolak! > Padamkan elemen, kembalikan nil jika tiada perubahan. Bersamaan dengan Array#delete_if. 53 |
Ganti kandungan | array dengan other_array Kandungan akan dipotong atau dikembangkan apabila perlu. 54 |
Mengembalikan tatasusunan baharu yang mengandungi unsur tatasusunan dalam susunan terbalik. | 55 |
Reverse | array. 56 |
Sama seperti Array#each, tetapi gunakan | array Lakukan pembalikan. 57 |
Mengembalikan indeks objek terakhir dalam tatasusunan sama dengan obj. Jika tiada padanan ditemui, | tiada dikembalikan. 58 |
Panggil blok yang melepasi elemen berturut-turut daripada tatasusunan dan kembalikan tatasusunan , mengandungi elemen apabila blok mengembalikan nilai | true. 59 |
Mengembalikan elemen pertama | diri dan mengalih keluar elemen itu (Pindahkan semua elemen lain turun satu kedudukan). Jika tatasusunan kosong, kembalikan nihil . 60 |
Mengembalikan panjang (bilangan elemen) | array. Alias untuk panjang. 61 |
array.slice(julat ) [atau] tatasusunan[indeks] [atau] | tatasusunan[mula, panjang] [atau] tatasusunan[julat] Mengembalikan elemen dengan indeks indeks , atau mengembalikan elemen dari mula memulakan subarray sehingga panjang elemen, atau mengembalikan subarray yang ditentukan oleh julat. Indeks negatif dikira dari penghujung tatasusunan (-1 ialah elemen terakhir). Jika indeks (atau indeks permulaan) berada di luar julat, kembalikan tiada. 62 |
array.slice !(julat) | Memadamkan elemen yang ditentukan oleh indeks (panjang adalah pilihan) atau julat . Mengembalikan objek yang dipadamkan, subarray atau nihil jika indeks berada di luar julat. 63 |
Mengembalikan tatasusunan . | 64 |
65 | array.to_a|
diri | . Jika dipanggil pada subkelasArray, argumen yang diterima ditukar kepada objek Array. 66 | array.to_ary
67 | array.to_s|
68 | array.transpose Anggap diri ialah tatasusunan, dengan baris dan lajur dialihkan. |
69 | array.uniq Mengembalikan tatasusunan baharu dengan pendua dalam array nilai yang dialih keluar. |
70 | array.uniq! Alih keluar unsur pendua daripada diri. Jika tiada perubahan (iaitu, tiada pendua ditemui), tiada dikembalikan. |
71 | array.unshift(obj, ...) Letakkan objek di hadapan tatasusunan, pada elemen lain Bergerak satu kedudukan. |
72 | array.values_at(selector,...) Mengembalikan tatasusunan yang mengandungi diri dengan pemilih yang diberikan (satu atau lebih) elemen yang sepadan. Pemilih boleh menjadi indeks integer atau julat. |
73 | array.zip(arg, ...) [atau] array.zip(arg, ...){ | arr |. blok } Tukar sebarang parameter kepada tatasusunan, dan kemudian gabungkan elemen tatasusunan dengan elemen yang sepadan bagi setiap parameter. |
Arahan pek tatasusunan
Jadual berikut menyenaraikan arahan mampatan untuk kaedah Pek Array#.
指令 | 描述 |
---|---|
@ | 移动到绝对位置。 |
A | ASCII 字符串(填充 space,count 是宽度)。 |
a | ASCII 字符串(填充 null,count 是宽度)。 |
B | 位字符串(降序) |
b | 位字符串(升序)。 |
C | 无符号字符。 |
c | 字符。 |
D, d | 双精度浮点数,原生格式。 |
E | 双精度浮点数,little-endian 字节顺序。 |
e | 单精度浮点数,little-endian 字节顺序。 |
F, f | 单精度浮点数,原生格式。 |
G | 双精度浮点数,network(big-endian)字节顺序。 |
g | 单精度浮点数,network(big-endian)字节顺序。 |
H | 十六进制字符串(高位优先)。 |
h | 十六进制字符串(低位优先)。 |
I | 无符号整数。 |
i | 整数。 |
L | 无符号 long。 |
l | Long。 |
M | 引用可打印的,MIME 编码。 |
m | Base64 编码字符串。 |
N | Long,network(big-endian)字节顺序。 |
n | Short,network(big-endian)字节顺序。 |
P | 指向一个结构(固定长度的字符串)。 |
p | 指向一个空结束字符串。 |
Q, q | 64 位数字。 |
S | 无符号 short。 |
s | Short。 |
U | UTF-8。 |
u | UU 编码字符串。 |
V | Long,little-endian 字节顺序。 |
v | Short,little-endian 字节顺序。 |
w | BER 压缩的整数 fnm。 |
X | 向后跳过一个字节。 |
x | Null 字节。 |
Z | 与 a 相同,除了 null 会被加上 *。 |
Contoh
Cuba contoh berikut untuk memampatkan pelbagai data.
a = [ "a", "b", "c" ] n = [ 65, 66, 67 ] puts a.pack("A3A3A3") #=> "a b c " puts a.pack("a3a3a3") #=> "aa b c abc ABC0rrreee0brrreee0rrreee0crrreee0rrreee0" puts n.pack("ccc") #=> "ABC"
Hasil keluaran contoh di atas ialah:
rrreee