English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

arrays (Array) في Ruby

Ruby 数组是任何对象的有序整数索引集合。数组中的每个元素都与一个索引相关,并可通过索引进行获取。

数组的索引从 0 开始,这与 C 或 Java 中一样。一个负数的索相对于数组的末尾计数的,也就是说,索引为 -1 表示数组的最后一个元素,-2 表示数组中的倒数第二个元素,依此类推。

Ruby 数组可存储诸如 String、 Integer、 Fixnum、 Hash、 Symbol 等对象,甚至可以是其他 Array 对象。

Ruby 数组不需要指定大小,当向数组添加元素时,Ruby 数组会自动增长。

创建数组

有多种方式创建或初始化数组。一种方式是通过 new 类方法:

names = Array.new

您可以在创建数组的同时设置数组的大小:

names = Array.new(20)

数组 names 的大小或长度为 20 个元素。您可以使用 size 或 length 方法返回数组的大小:

مثال على الإنترنت

#!/usr/bin/ruby
 
names = Array.new(20)
puts names.size # 返回 20
puts names.length # 返回 20

نتيجة التشغيل للعينة أعلاه هي:

20
20

您可以给数组中的每个元素赋值,如下所示:

مثال على الإنترنت

#!/usr/bin/ruby
 
names = Array.new(4, "mac")
 
puts "#{names}"

نتيجة التشغيل للعينة أعلاه هي:

["mac", "mac", "mac", "mac"]

您也可以使用带有 new 的块,每个元素使用块中的计算结果来填充:

مثال على الإنترنت

#!/usr/bin/ruby
 
nums = Array.new(10) { |e| e = e * 2 }
 
puts "#{nums}"

نتيجة التشغيل للعينة أعلاه هي:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

数组还有另一种方法,[],如下所示:

nums = Array[1, 2, 3, 4, 5]

شكل آخر لإنشاء مجموعة هو كما يلي:}

nums = Array[1, 2, 3, 4, 5]

يمكن أن يكون لديك طريقة Array في وحدة Ruby الأساسية تأخذ مُدخل واحد وتستخدمه لإنشاء مجموعة أرقام:

مثال على الإنترنت

#!/usr/bin/ruby
 
digits = Array(0..9)
 
puts "#{digits}"

نتيجة التشغيل للعينة أعلاه هي:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

طرق المجموعات المدمجة

نحتاج إلى مُثال على مجموعة Array لاستدعاء طرق Array. إليك بعض الطرق لإنشاء مجموعة Array:

Array.[](...) [أو] Array[...] [أو] [...]

سيكون هذا يعود إلى مجموعة جديدة تحتوي على العناصر المُعطاة. الآن، باستخدام العناصر المُنتجة، يمكننا استدعاء أي طريقة متاحة. على سبيل المثال:

مثال على الإنترنت

#!/usr/bin/ruby
 
digits = Array(0..9)
 
num = digits.at(6)
 
puts "#{num}"

نتيجة التشغيل للعينة أعلاه هي:

6

هذه هي الطرق العامة للمجموعات (تُفترض) array هو مُجموعة Array (مثال):

الرقمالطريقة & الوصف
1array & other_array
يعود مجموعة جديدة تحتوي على العناصر المشتركة بين المجموعتين بدون تكرار.
2array * int [أو] array * str
يعود مجموعة جديدة، تحتوي على نسخة من self بإنشاء عدد من النسخ. عند وجود مُدخل String، يعاد إلى self.join(str).
3array + other_array
يعود مجموعة جديدة، تحتوي على مجموعة ثالثة تم إنشاؤها بتحديد اثنين من المجموعتين.
4array - other_array
يعود مجموعة جديدة، تحتوي على نسخة من المجموعة الأصلية بعد إزالة العناصر التي تظهر في other_array.
5str <=> other_str
مقارنة str مع other_str، يعود -1 (أقل من)، 0 (مساوي) أو 1 (أكبر). المقارنة تعتمد على التفاضل.
6array | other_array
بإضافة other_array إلى array، إزالة العناصر المكررة، يعود مجموعة جديدة.
7array << obj
إضافة العنصر المُعطى إلى نهاية المجموعة. يعود التعبير نفس المجموعة، لذا يمكن ربط عدة إضافات معًا.
8array <=> other_array
إذا كان المُجموع أقلًا أو مساوًا أو أكبر من other_array، فإنه يعود برقم إجابي (-1، 0 أو +1).
9array == other_array
إذا كان لديه نفس عدد العناصر، وكان كل عنصر متطابق مع العنصر المماثل في اللوحة الأخرى (بناءً على Object.==)، فإن اللوحةين متطابقتان.
10array[index] [أو] array[start, length] [أو]
array[range] [أو] array.slice(index) [أو]
array.slice(start, length) [أو] array.slice(range)

array[start, length] [أو] array[range] index يعود المؤشر لـ العنصر، أو يعود من start من البداية حتى length range المجموعة الفرعية للعناصر، أو يعود indexإذا كان (أو بداية المؤشر) خارج المدى، يعود nil.
11array[index] = obj [أو]
array[range] = obj أو an_array أو nil [أو]
إعداد المؤشر إلى

العناصر، أو استبدال من index العناصر، أو استبدال العنصر، أو يعود من start من البداية حتى لوحة تحتوي على range اللوحة الفرعية المحددة. إذا كان المؤشر أكبر من حجم اللوحة الحالية، فإن اللوحة تنمو تلقائيًا. إذا كان المؤشر سالباً، يبدأ من نهاية اللوحة. إذا من البداية حتى إذا تم استخدام nil، فإنه يتم إدراج العنصر من self حذف العنصر.
12array.abbrev(pattern = nil)
self حسابات الأكواد المختصرة المحددة في اللوحة. إذا تم تقديم نموذج أو سلسلة، يتم النظر فقط في الحالات التي تطابق النمط أو تبدأ بسلسلة.
13array.assoc(obj)
البحث عن لوحة تحتوي على عناصر هي لوحات، باستخدام obj.== لقياس obj مع العنصر الأول في كل لوحة المحتوية. إذا كانت هناك تطابق، يعود أول لوحة تحتوي على التطابق، وإذا لم يتم العثور على تطابق، يعود nil.
14array.at(index)
يعود العنصر عند المؤشر index. إذا كان المؤشر سالباً، يبدأ من self من نهاية اللوحة. إذا كان المؤشر يتجاوز النطاق، فإنه يعود nil.
15array.clear
إزالة جميع العناصر من اللوحة.
16array.collect { |item| block } [أو]
array.map { |item| block }

self يتم استدعاء مرة واحدة لكل عنصر في block。创建一个新的数组,包含 block 返回的值。
17array.collect! { |item| block } [أو]
array.map! { |item| block }

self يتم استدعاء مرة واحدة لكل عنصر في block، واستبدال العناصر ب block القيمة المعدة.
18array.compact
يعود self نسخة منه، وإزالة جميع nil الإлемент.
19array.compact!
إزالة جميع العناصر من الصفيف nil العناصر. إذا لم يحدث أي تغيير فيقوم بالعودة nil.
20concat(other_array)
إضافة عناصر other_array إلى self النتيجة.
في21
delete(obj) [أو]

من self delete(obj) { block } obj العنصر في nil، إذا لم يتم العثور على عنصر متطابق وتقديم الكود الاختياري block، فيقوم بالعودة block النتيجة.
22delete_at(index)
إزالة المحدد index العنصر في الموضع، ويقوم بالعودة بالعنصر. إذا كان الموضع يتجاوز النطاق، فيقوم بالعودة nil.
23delete_if { |item| block }
عندما block عندما يكون صحيحاً، يتم إزالة self كل عنصر.
24each { |item| block }
self يتم استدعاء مرة واحدة لكل عنصر في block، يقدم العنصر كمعامل.
25each_index { |index| block }
مثل Array#each، ولكن يقدم العنصر كمعامل. index، وليس عنصراً نفسه.
26empty?
إذا لم يحتوي الصفيف نفسه على عناصر، فيقوم بالعودة بـ true.
27eql?(other)
如果 array و other هما نفس الكائن، أو يحتويان على محتوى مشابه، فيقوم بالعودة بـ true.
28fetch(index) [أو]
fetch(index, default) [أو]
fetch(index) { |index| block }

لتحاول العودة إلى الموضع index العنصر في الموضع index يوجد خارج الصفيف، الشكل الأول سيقوم بإلقاء IndexError استثنائية، الشكل الثاني سيقوم بتقديم default، الشكل الثالث سيقوم بتقديم block تقدم index القيمة. القيم السلبية index من بداية نهاية الصفيف.
29fill(obj) [أو]
fill(obj, start [, length]) [أو]
fill(obj, range) [أو]
fill { |index| block } [أو]
fill(start [, length] ) { |index| block } [أو]
fill(range) { |index| block }

前面三种形式设置 self 的被选元素为 obj。以 nil 开头相当于零。nil 的长度相当于 self.length。最后三种形式用 block 的值填充数组。block 通过带有被填充的每个元素的绝对索引来传递。
30array.first [or]
array.first(n)

返回数组的第一个元素或前 n 个元素。如果数组为空,则第一种形式返回 nil,第二种形式返回一个空的数组。
31array.flatten
返回一个新的数组,新数组是一个一维的扁平化的数组(递归)。
32array.flatten!
array 进行扁平化。如果没有变化则返回 nil。(数组不包含子数组。)
33array.frozen?
如果 array 被冻结(或排序时暂时冻结),则返回 true。
34array.hash
计算数组的哈希代码。两个具有相同内容的数组将具有相同的哈希代码。
35array.include?(obj)
如果 self 中包含 obj,则返回 true,否则返回 false。
36array.index(obj)
يعود self 中第一个等于 obj 的对象的 index。如果未找到匹配则返回 nil.
37array.indexes(i1, i2, ... iN) [or]
array.indices(i1, i2, ... iN)

该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#values_at。
38array.indices(i1, i2, ... iN) [or]
array.indexes(i1, i2, ... iN)

该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#values_at。
39array.insert(index, obj...)
在给定的 index 的元素前插入给定的值,index 可以是负值。
40array.inspect
创建一个数组的可打印版本。
41array.join(sep=$,)
返回一个字符串,通过把数组的每个元素转换为字符串,并使用 sep 分隔进行创建的。
42array.last [or] array.last(n)
يعود self 的最后一个元素。如果数组为,则第一种形式返回 nil.
43array.length
يعود self 中元素的个数。可能为零。
44array.map { |item| block } [or]
array.collect { |item| block }

self 的每个元素调用一次 block。创建一个新的数组,包含 block 返回的值。
45array.map! { |item| block } [or]
array.collect! { |item| block }

array 的每个元素调用一次 block,把元素替换为 block 返回的值。
46array.nitems
يعود self 中 non-nil 元素的个数。可能为零。
47array.pack(aTemplateString)
根据 aTemplateString 中的指令,把数组的内容压缩为二进制序列。指令 A、 a 和 Z 后可以跟一个表示结果字段宽度的数字。剩余的指令也可以带有一个表示要转换的数组元素个数的数字。如果数字是一个星号(*),则所有剩余的数组元素都将被转换。任何指令后都可以跟一个下划线(_),表示指定类型使用底层平台的本地尺寸大小,否则使用独立于平台的一致的尺寸大小。在模板字符串中空格会被忽略。
48array.pop
من array 中移除最后一个元素,并返回该元素。如果 array 为空则返回 nil.
49array.push(obj, ...)
把给定的 obj 附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起。
50array.rassoc(key)
搜索一个数组,其元素也是数组,使用 == 把 key 与每个包含的数组的第二个元素进行比较。如果匹配则返回第一个包含的数组。
51array.reject { |item| block }
返回一个新的数组,包含当 block 不为 true 时的数组项。
52array.reject! { |item| block }
当 block 为真时,从 array 删除元素,如果没有变化则返回 nil。相当于 Array#delete_if。
53array.replace(other_array)
array 的内容替换为 other_array 的内容,必要的时候进行截断或扩充。
54array.reverse
返回一个新的数组,包含倒序排列的数组元素。
55array.reverse!
array مثل Array#each، ولكن
56array.reverse_each {|item| block }
}} array مثل Array#each، ولكن
ينقل.57
array.rindex(obj) nil.
يعود المؤشر للعنصر الأخير في array الذي يساوي obj. إذا لم يتم العثور على تطابق، يعود58
array.select {|item| block } تُستدعى دالة block من المجموعة المتتابعة، وتُعيد مجموعة تحتوي على عناصر تُعيدها block. true
العنصر عند القيمة المحددة.59
يعود self array.shift nil.
العنصر الأول، ويزيل العنصر (يحرك جميع العناصر الأخرى نحو الأسفل). إذا كان المجموعة فارغة، يعود60
يعود array array.size
الطول (عدد العناصر). اسم آخر لـ length.61
array.slice(index) [أو] array.slice(start, length) [أو]
array.slice(range) [أو] array[index] [أو]

array[start, length] [أو] array[range] index يعود المؤشر لـ العنصر، أو يعود من start من البداية حتى length range المجموعة الفرعية للعناصر، أو يعود indexإذا كان (أو بداية المؤشر) خارج المدى، يعود nil.
62array.slice!(index) [أو] array.slice!(start, length) [أو]
array.slice!(range)

إزالة index(طول اختياري) أو range العنصر المحدد. يعود العنصر المزيل، المجموعة الفرعية، إذا index المتعددة، يعود nil.
63array.sort [أو] array.sort { |a, b| block }
يعود مجموعة مرتبة.
64array.sort! [أو] array.sort! { |a, b| block }
يُقوم بترتيب المجموعة.
65array.to_a
يعود self. إذا كان في Array تُستدعى على فرع Array، يتم تحويل المعلمات إلى عنصر Array.
66array.to_ary
يعود self.
67array.to_s
يعود self.join.
68array.transpose
افتراض أن self هو مجموعة من المجموعات، وأن يتم تبديل الصف والعمود.
69array.uniq
يعود مصفوفة جديدة بعد إزالة array إزالة القيم المكررة.
70array.uniq!
من self من إزالة العناصر المكررة.إذا لم يكن هناك تغيير (أي أن لم يتم العثور على مكرر)،ثم nil.
71array.unshift(obj, ...)
تضع العنصر في مقدمة المصفوفة،ويتراجع باقي العناصر.
72array.values_at(selector,...)
يعود مصفوفة تحتوي على self التي تتوافق مع المحدد. selector(واحد أو أكثر) العناصر الموجودة في المعامل.المسؤول يمكن أن يكون معادلاً أو نطاقًا.
73array.zip(arg, ...) [أو]
array.zip(arg, ...){ | arr | block }

تحويل أي معامل إلى مصفوفة،ثم array العناصر تنسق مع العناصر الموجودة في كل من المعلمات.

أوامر pack لتجميع البايتات

الجدول أدناه يبين أوامر ضغط Array#pack.

التعليماتالوصف
@الانتقال إلى الموقع المطلق.
Aسلسلة ASCII (ملء بالفضاء،عدد هو العرض).
aسلسلة ASCII (ملء بالنص النظيف،عدد هو العرض).
Bسلسلة من الأعداد الحقيقية (عالي إلى منخفض)
bسلسلة من الأعداد الحقيقية (منخفض إلى عالي).
Cحرف غير معادلة.
cحرف.
D, dعدد عشري عالي الدقة،نسق الأصلي.
Eعدد عشري عالي الدقة،ترتيب البتات little-endian.
eعدد عشري منخفض الدقة،ترتيب البتات little-endian.
F, fعدد عشري منخفض الدقة،نسق الأصلي.
Gعدد عشري عالي الدقة،ترتيب البتات big-endian في الشبكة.
gعدد عشري منخفض الدقة،ترتيب البتات big-endian في الشبكة.
Hسلسلة عشري (عالي إلى منخفض).
hسلسلة عشري (منخفض إلى عالي).
Iعدد صحيح غير معادلة.
iعدد صحيح.
Llong غير معادلة.
lLong.
Mالإشارة إلى رمز MIME قابلة للطباعة.
mشيفرة الترميز Base64.
NLong،ترتيب البتات big-endian في الشبكة.
nShort،ترتيب البتات big-endian في الشبكة.
Pالإشارة إلى بنية (سلسلة ذات طول ثابت).
pالإشارة إلى سلسلة النهاية الفارغة.
Q, qرقم ذو 64 بت.
Sshort غير معادلة.
sShort.
UUTF-8.
وشيفرة الترميز UU.
VLong،ترتيب الأبجدية الصغيرة
vShort،ترتيب الأبجدية الصغيرة
wالعدد الكامل المضغوط BER \fnm.
Xالقفز إلى بایت واحد للوراء
xبайт فارغ
Zمثل a، باستثناء أن null سيتم إضافتها *.

مثال على الإنترنت

تجربة العينة التالية، قم بتضييق البيانات المختلفة.

مثال على الإنترنت

a = [ "a", "b", "c" ]
n = [ 65, 66, 67 ]
puts a.pack("A3A3A3")   #=> "a  b  c  "
puts a.pack("a3a3a3")   #=> "a\000\000b\000\000c\000\000"
puts n.pack("ccc")      #=> "ABC"

نتيجة التشغيل للعينة أعلاه هي:

a  b  c
abc
ABC