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):

1819202122232446array.nitems47array.pack(aTemplateString)48array.pop49array.push(obj, ...)50array.rassoc(key)51tatasusunan.tolak { |item| blok }array.replace(other_array)Ganti kandungan array.reverseMengembalikan tatasusunan baharu yang mengandungi unsur tatasusunan dalam susunan terbalik. array.reverse!Reverse array.reverse_each {|item| block }Sama seperti Array#each, tetapi gunakan array.rindex(obj)Mengembalikan indeks objek terakhir dalam tatasusunan sama dengan obj. Jika tiada padanan ditemui, array.select {|item| block }Panggil blok yang melepasi elemen berturut-turut daripada tatasusunan dan kembalikan tatasusunan , mengandungi elemen apabila blok mengembalikan nilai array.shiftMengembalikan elemen pertama array.sizeMengembalikan panjang (bilangan elemen) array.slice(indeks) [atau] array.slice(mula, panjang) [atau]tatasusunan[mula, panjang] [atau] tatasusunan[julat]array.slice!(index) [atau] array.slice!(mula, panjang) [atau]array.sort [atau] array.sort { | a,b | block }Mengembalikan tatasusunan . susun.susun! { | a,b | Isih. array.to_a mengembalikan . Jika dipanggil pada subkelas array.to_aryKembalikan diri. array.to_sKembalikan diri.menyertai.
Nombor siriKaedah & Penerangan
1array & other_array
Mengembalikan tatasusunan baharu yang mengandungi unsur biasa dalam kedua-dua tatasusunan tanpa pendua.
2tatasusunan * int [atau] tatasusunan * str
Mengembalikan tatasusunan baharu, tatasusunan baharu disambungkan oleh int daripada diri Salinan dicipta. Dengan parameter String, bersamaan dengan self.join(str).
3array + other_array
mengembalikan tatasusunan baharu yang dicipta dengan menggabungkan dua tatasusunan untuk menghasilkan tatasusunan ketiga.
4array - other_array
Mengembalikan tatasusunan baharu yang dialih keluar daripada tatasusunan awal dalam array_lain Salinan item yang muncul.
5str <=> 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.
6tatasusunan_lain
Dengan menambah tatasusunan_lain pada tatasusunan, alih keluar pendua dan kembalikan tatasusunan baharu.
7tatasusunan << obj
Menambahkan objek yang diberi pada penghujung tatasusunan. Ungkapan mengembalikan tatasusunan itu sendiri, jadi beberapa penambahan boleh dirantai bersama.
8array <=> other_array
Mengembalikan integer jika array kurang daripada, sama dengan atau lebih besar daripada other_array (- 1, 0 atau +1).
9array == 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.
10tatasusunan[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.
11array[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.
12array.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.
13array.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.
14array.at(index)
Mengembalikan elemen dengan indeks indeks. Indeks negatif dikira dari penghujung diri. Mengembalikan sifar jika indeks berada di luar julat.
15array.clear
Mengalih keluar semua elemen daripada tatasusunan.
16array.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.
17susun.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.
25array.each_index { |index| block }
Sama seperti Array#each, tetapi melepasi elemen indeks bukannya melepasi elemen itu sendiri.
26tatasusunan.kosong?
Mengembalikan benar jika tatasusunan itu sendiri tidak mengandungi unsur.
27array.eql?(other)
if array dan lain ialah objek yang sama, atau dua tatasusunan mempunyai kandungan yang sama, maka benar dikembalikan.
28array.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.
29array.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.
30array.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.
31array.flatten
Mengembalikan tatasusunan baharu, iaitu tatasusunan leper satu dimensi (secara rekursif ).
32susun.ratakan!
Ratakan susun. Jika tiada perubahan, kembalikan tiada. (Array tidak mengandungi subaray.)
33array.beku?
jika array dibekukan ( atau dibekukan sementara semasa pengisihan), ia kembali benar.
34array.hash
Mengira kod cincang tatasusunan. Dua tatasusunan dengan kandungan yang sama akan mempunyai kod cincang yang sama.
35array.include?(obj)
Jika diri mengandungi obj, ia mengembalikan benar, jika tidak ia mengembalikan palsu.
36array.index(obj)
Mengembalikan objek pertama dalam diri yang sama dengan obj indeks. Mengembalikan tiada jika tiada padanan ditemui.
37array.indexes(i1, i2, ... iN) [atau]
array.indices(i1, i2, . ..iN)

Kaedah ini ditamatkan dalam versi terkini Ruby, jadi gunakan Array#values_at sebaliknya.
38array.indeks(i1, i2, ... iN) [atau]
array.indexes(i1, i2, . .. iN)

Kaedah ini ditamatkan dalam versi Ruby terbaharu, jadi gunakan Array#values_at sebagai gantinya.
39array.insert(index, obj...)
pada index yang diberikan nilai yang diberikan sebelum elemen, indeks boleh menjadi nilai negatif.
40array.inspect
Mencipta versi boleh cetak tatasusunan.
41array.join(sep=$,)
Mengembalikan rentetan dengan menukar setiap elemen tatasusunan ialah rentetan dan dibuat menggunakan pemisah sep.
42array.last [or] array.last(n)
mengembalikan yang terakhir diri unsur. Borang pertama mengembalikan nihil jika tatasusunan adalah null.
43array.length
Mengembalikan bilangan elemen dalam diri. Mungkin sifar.
44array.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.
45tatasusunan.peta! >
Panggil
sekat
sekali untuk setiap elemen tatasusunan, menggantikan elemen dengan nilai yang dikembalikan oleh blok.
Mengembalikan bilangan elemen bukan nol dalam diri
. Mungkin sifar.
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.
Mengalih keluar elemen terakhir daripada array
dan mengembalikan elemen itu . Mengembalikan tiada jika tatasusunan kosong.
Menambahkan obj yang diberi pada penghujung tatasusunan. Ungkapan mengembalikan tatasusunan itu sendiri, jadi beberapa penambahan boleh dirantai bersama.
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.
Mengembalikan tatasusunan baharu yang mengandungi item tatasusunan apabila blok tidak benar.
52tatasusunan.tolak! > Padamkan elemen, kembalikan nil
jika tiada perubahan. Bersamaan dengan Array#delete_if. 53
array dengan other_array Kandungan
akan dipotong atau dikembangkan apabila perlu. 54

55
array.
56
array Lakukan pembalikan.
57
tiada dikembalikan.
58
true.
59
diri dan mengalih keluar elemen itu (Pindahkan semua elemen lain turun satu kedudukan). Jika tatasusunan kosong, kembalikan nihil
. 60
array. Alias ​​untuk panjang.
61
array.slice(julat ) [atau] tatasusunan[indeks] [atau] 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

64
65
diriArray, argumen yang diterima ditukar kepada objek Array.
66
67
68array.transpose
Anggap diri ialah tatasusunan, dengan baris dan lajur dialihkan.
69array.uniq
Mengembalikan tatasusunan baharu dengan pendua dalam array nilai yang dialih keluar.
70array.uniq!
Alih keluar unsur pendua daripada diri. Jika tiada perubahan (iaitu, tiada pendua ditemui), tiada dikembalikan.
71array.unshift(obj, ...)
Letakkan objek di hadapan tatasusunan, pada elemen lain Bergerak satu kedudukan.
72array.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.
73array.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#.

指令描述
@移动到绝对位置。
AASCII 字符串(填充 space,count 是宽度)。
aASCII 字符串(填充 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。
lLong。
M引用可打印的,MIME 编码。
mBase64 编码字符串。
NLong,network(big-endian)字节顺序。
nShort,network(big-endian)字节顺序。
P指向一个结构(固定长度的字符串)。
p指向一个空结束字符串。
Q, q64 位数字。
S无符号 short。
sShort。
UUTF-8。
uUU 编码字符串。
VLong,little-endian 字节顺序。
vShort,little-endian 字节顺序。
wBER 压缩的整数 fnm。
X向后跳过一个字节。
xNull 字节。
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")   #=> "a
a  b  c
abc
ABC
0rrreee0brrreee0rrreee0crrreee0rrreee0" puts n.pack("ccc")      #=> "ABC"

Hasil keluaran contoh di atas ialah:

rrreee