English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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 (مثال):
الرقم | الطريقة & الوصف |
---|---|
1 | array & other_array يعود مجموعة جديدة تحتوي على العناصر المشتركة بين المجموعتين بدون تكرار. |
2 | array * int [أو] array * str يعود مجموعة جديدة، تحتوي على نسخة من self بإنشاء عدد من النسخ. عند وجود مُدخل String، يعاد إلى self.join(str). |
3 | array + other_array يعود مجموعة جديدة، تحتوي على مجموعة ثالثة تم إنشاؤها بتحديد اثنين من المجموعتين. |
4 | array - other_array يعود مجموعة جديدة، تحتوي على نسخة من المجموعة الأصلية بعد إزالة العناصر التي تظهر في other_array. |
5 | str <=> other_str مقارنة str مع other_str، يعود -1 (أقل من)، 0 (مساوي) أو 1 (أكبر). المقارنة تعتمد على التفاضل. |
6 | array | other_array بإضافة other_array إلى array، إزالة العناصر المكررة، يعود مجموعة جديدة. |
7 | array << obj إضافة العنصر المُعطى إلى نهاية المجموعة. يعود التعبير نفس المجموعة، لذا يمكن ربط عدة إضافات معًا. |
8 | array <=> other_array إذا كان المُجموع أقلًا أو مساوًا أو أكبر من other_array، فإنه يعود برقم إجابي (-1، 0 أو +1). |
9 | array == other_array إذا كان لديه نفس عدد العناصر، وكان كل عنصر متطابق مع العنصر المماثل في اللوحة الأخرى (بناءً على Object.==)، فإن اللوحةين متطابقتان. |
10 | array[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. |
11 | array[index] = obj [أو] array[range] = obj أو an_array أو nil [أو] إعداد المؤشر إلى العناصر، أو استبدال من index العناصر، أو استبدال العنصر، أو يعود من start من البداية حتى لوحة تحتوي على range اللوحة الفرعية المحددة. إذا كان المؤشر أكبر من حجم اللوحة الحالية، فإن اللوحة تنمو تلقائيًا. إذا كان المؤشر سالباً، يبدأ من نهاية اللوحة. إذا من البداية حتى إذا تم استخدام nil، فإنه يتم إدراج العنصر من self حذف العنصر. |
12 | array.abbrev(pattern = nil) 为 self حسابات الأكواد المختصرة المحددة في اللوحة. إذا تم تقديم نموذج أو سلسلة، يتم النظر فقط في الحالات التي تطابق النمط أو تبدأ بسلسلة. |
13 | array.assoc(obj) البحث عن لوحة تحتوي على عناصر هي لوحات، باستخدام obj.== لقياس obj مع العنصر الأول في كل لوحة المحتوية. إذا كانت هناك تطابق، يعود أول لوحة تحتوي على التطابق، وإذا لم يتم العثور على تطابق، يعود nil. |
14 | array.at(index) يعود العنصر عند المؤشر index. إذا كان المؤشر سالباً، يبدأ من self من نهاية اللوحة. إذا كان المؤشر يتجاوز النطاق، فإنه يعود nil. |
15 | array.clear إزالة جميع العناصر من اللوحة. |
16 | array.collect { |item| block } [أو] array.map { |item| block } 为 self يتم استدعاء مرة واحدة لكل عنصر في block。创建一个新的数组,包含 block 返回的值。 |
17 | array.collect! { |item| block } [أو] array.map! { |item| block } 为 self يتم استدعاء مرة واحدة لكل عنصر في block، واستبدال العناصر ب block القيمة المعدة. |
18 | array.compact يعود self نسخة منه، وإزالة جميع nil الإлемент. |
19 | array.compact! إزالة جميع العناصر من الصفيف nil العناصر. إذا لم يحدث أي تغيير فيقوم بالعودة nil. |
20 | concat(other_array) إضافة عناصر other_array إلى self النتيجة. |
في | 21 delete(obj) [أو] من self delete(obj) { block } obj العنصر في nil، إذا لم يتم العثور على عنصر متطابق وتقديم الكود الاختياري block، فيقوم بالعودة block النتيجة. |
22 | delete_at(index) إزالة المحدد index العنصر في الموضع، ويقوم بالعودة بالعنصر. إذا كان الموضع يتجاوز النطاق، فيقوم بالعودة nil. |
23 | delete_if { |item| block } عندما block عندما يكون صحيحاً، يتم إزالة self كل عنصر. |
24 | each { |item| block } 为 self يتم استدعاء مرة واحدة لكل عنصر في block، يقدم العنصر كمعامل. |
25 | each_index { |index| block } مثل Array#each، ولكن يقدم العنصر كمعامل. index، وليس عنصراً نفسه. |
26 | empty? إذا لم يحتوي الصفيف نفسه على عناصر، فيقوم بالعودة بـ true. |
27 | eql?(other) 如果 array و other هما نفس الكائن، أو يحتويان على محتوى مشابه، فيقوم بالعودة بـ true. |
28 | fetch(index) [أو] fetch(index, default) [أو] fetch(index) { |index| block } لتحاول العودة إلى الموضع index العنصر في الموضع index يوجد خارج الصفيف، الشكل الأول سيقوم بإلقاء IndexError استثنائية، الشكل الثاني سيقوم بتقديم default، الشكل الثالث سيقوم بتقديم block تقدم index القيمة. القيم السلبية index من بداية نهاية الصفيف. |
29 | fill(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 通过带有被填充的每个元素的绝对索引来传递。 |
30 | array.first [or] array.first(n) 返回数组的第一个元素或前 n 个元素。如果数组为空,则第一种形式返回 nil,第二种形式返回一个空的数组。 |
31 | array.flatten 返回一个新的数组,新数组是一个一维的扁平化的数组(递归)。 |
32 | array.flatten! 把 array 进行扁平化。如果没有变化则返回 nil。(数组不包含子数组。) |
33 | array.frozen? 如果 array 被冻结(或排序时暂时冻结),则返回 true。 |
34 | array.hash 计算数组的哈希代码。两个具有相同内容的数组将具有相同的哈希代码。 |
35 | array.include?(obj) 如果 self 中包含 obj,则返回 true,否则返回 false。 |
36 | array.index(obj) يعود self 中第一个等于 obj 的对象的 index。如果未找到匹配则返回 nil. |
37 | array.indexes(i1, i2, ... iN) [or] array.indices(i1, i2, ... iN) 该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#values_at。 |
38 | array.indices(i1, i2, ... iN) [or] array.indexes(i1, i2, ... iN) 该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#values_at。 |
39 | array.insert(index, obj...) 在给定的 index 的元素前插入给定的值,index 可以是负值。 |
40 | array.inspect 创建一个数组的可打印版本。 |
41 | array.join(sep=$,) 返回一个字符串,通过把数组的每个元素转换为字符串,并使用 sep 分隔进行创建的。 |
42 | array.last [or] array.last(n) يعود self 的最后一个元素。如果数组为空,则第一种形式返回 nil. |
43 | array.length يعود self 中元素的个数。可能为零。 |
44 | array.map { |item| block } [or] array.collect { |item| block } 为 self 的每个元素调用一次 block。创建一个新的数组,包含 block 返回的值。 |
45 | array.map! { |item| block } [or] array.collect! { |item| block } 为 array 的每个元素调用一次 block,把元素替换为 block 返回的值。 |
46 | array.nitems يعود self 中 non-nil 元素的个数。可能为零。 |
47 | array.pack(aTemplateString) 根据 aTemplateString 中的指令,把数组的内容压缩为二进制序列。指令 A、 a 和 Z 后可以跟一个表示结果字段宽度的数字。剩余的指令也可以带有一个表示要转换的数组元素个数的数字。如果数字是一个星号(*),则所有剩余的数组元素都将被转换。任何指令后都可以跟一个下划线(_),表示指定类型使用底层平台的本地尺寸大小,否则使用独立于平台的一致的尺寸大小。在模板字符串中空格会被忽略。 |
48 | array.pop من array 中移除最后一个元素,并返回该元素。如果 array 为空则返回 nil. |
49 | array.push(obj, ...) 把给定的 obj 附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起。 |
50 | array.rassoc(key) 搜索一个数组,其元素也是数组,使用 == 把 key 与每个包含的数组的第二个元素进行比较。如果匹配则返回第一个包含的数组。 |
51 | array.reject { |item| block } 返回一个新的数组,包含当 block 不为 true 时的数组项。 |
52 | array.reject! { |item| block } 当 block 为真时,从 array 删除元素,如果没有变化则返回 nil。相当于 Array#delete_if。 |
53 | array.replace(other_array) 把 array 的内容替换为 other_array 的内容,必要的时候进行截断或扩充。 |
54 | array.reverse 返回一个新的数组,包含倒序排列的数组元素。 |
55 | array.reverse! 把 array مثل Array#each، ولكن |
56 | array.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. |
62 | array.slice!(index) [أو] array.slice!(start, length) [أو] array.slice!(range) إزالة index(طول اختياري) أو range العنصر المحدد. يعود العنصر المزيل، المجموعة الفرعية، إذا index المتعددة، يعود nil. |
63 | array.sort [أو] array.sort { |a, b| block } يعود مجموعة مرتبة. |
64 | array.sort! [أو] array.sort! { |a, b| block } يُقوم بترتيب المجموعة. |
65 | array.to_a يعود self. إذا كان في Array تُستدعى على فرع Array، يتم تحويل المعلمات إلى عنصر Array. |
66 | array.to_ary يعود self. |
67 | array.to_s يعود self.join. |
68 | array.transpose افتراض أن self هو مجموعة من المجموعات، وأن يتم تبديل الصف والعمود. |
69 | array.uniq يعود مصفوفة جديدة بعد إزالة array إزالة القيم المكررة. |
70 | array.uniq! من self من إزالة العناصر المكررة.إذا لم يكن هناك تغيير (أي أن لم يتم العثور على مكرر)،ثم nil. |
71 | array.unshift(obj, ...) تضع العنصر في مقدمة المصفوفة،ويتراجع باقي العناصر. |
72 | array.values_at(selector,...) يعود مصفوفة تحتوي على self التي تتوافق مع المحدد. selector(واحد أو أكثر) العناصر الموجودة في المعامل.المسؤول يمكن أن يكون معادلاً أو نطاقًا. |
73 | array.zip(arg, ...) [أو] array.zip(arg, ...){ | arr | block } تحويل أي معامل إلى مصفوفة،ثم array العناصر تنسق مع العناصر الموجودة في كل من المعلمات. |
الجدول أدناه يبين أوامر ضغط 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 | عدد صحيح. |
L | long غير معادلة. |
l | Long. |
M | الإشارة إلى رمز MIME قابلة للطباعة. |
m | شيفرة الترميز Base64. |
N | Long،ترتيب البتات big-endian في الشبكة. |
n | Short،ترتيب البتات big-endian في الشبكة. |
P | الإشارة إلى بنية (سلسلة ذات طول ثابت). |
p | الإشارة إلى سلسلة النهاية الفارغة. |
Q, q | رقم ذو 64 بت. |
S | short غير معادلة. |
s | Short. |
U | UTF-8. |
و | شيفرة الترميز UU. |
V | Long،ترتيب الأبجدية الصغيرة |
v | Short،ترتيب الأبجدية الصغيرة |
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