في Ruby، المصفوفات مجموعات مرتّبة ومفهرسة بأعداد صحيحة ويمكنها أن تحتوي على أي نوع من الكائنات.
تبدأ فهرسة المصفوفات من 0.
ويُفترض أن يكون الفهرس السالب نسبيًا إلى نهاية المصفوفة، فعلى سبيل المثال يشير الفهرس -1 إلى العنصر الأخير في المصفوفة، و-2 إلى العنصر قبل الأخير فيها، وهكذا.
عادةً ما تُنشأ المصفوفات باستخدام الصيغة [].
ويمكنها أن تحتوي على أي نوع مختلف من الكائنات.
array = [1, "two", 3.0]
يمكن استرجاع عناصر المصفوفة بواسطة فهارسها باستخدام الطريقة #[].
وهي تُرجع العنصر عند الفهرس المحدد، أو تُرجع مصفوفة فرعية تبدأ عند فهرس البداية وتمتد بطول محدد.
تُعد الفهارس السالبة تنازليًا من نهاية المصفوفة.
a = [ "a", "b", "c", "d", "e" ]
a[2] #=> "c"
a[6] #=> nil
a[1, 3] #=> [ "b", "c", "d" ]
a[-1] #=> "e"
a[-2] #=> "d"
a[-3, 2] #=> ["c", "d"]
هناك العديد من الطرق المساعدة المفيدة في المصفوفات. إليك بعضًا من أكثرها شيوعًا:
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.size #=> 8
fibonacci.sum #=> 33
fibonacci.reverse #=> [13, 8, 5, 3, 2, 1, 1, 0]
بدلًا من استخدام الحلقات للتنقل عبر المجموعات، نستخدم في Ruby التعداد.
التعداد هو الانتقال عبر مجموعة (وهي هنا مصفوفة) وتنفيذ إجراء ما على كل كائن. والتعداد مفهوم أساسي في Ruby، ويُستخدم في أمور مثل الترتيب والتجميع والتحويل والاختزال وغيرها الكثير.
وسيبدو التعداد الذي يُخرج كل كلمة في مصفوفة هكذا:
words = ["the", "cat", "sat"]
words.each do |word|
puts word
end
# Output:
# the
# cat
# sat
في هذا المثال، استدعينا الطريقة .each على مصفوفتنا ومرّرنا كتلة تأخذ معاملًا واحدًا (word) وتُخرجه.
سنلقي نظرة على الكتل بتفصيل أكبر بكثير لاحقًا في المسار، لكن اعتبرها الآن دوالًا مجهولة يمكنها أن تأخذ صفرًا أو أكثر من الوسائط.
ويمكن تعريفها باستخدام صيغة do...end (أعلاه)، أو صيغة {} (أدناه).
إليك بعض الأمثلة الأخرى على طرق المصفوفات التي تستخدم الكتل:
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.count { |number| number == 1 } #=> 2
fibonacci.any? { |number| number == 6 } #=> false
fibonacci.select { |number| number.odd? } #=> [1, 1, 3, 5, 13]
fibonacci.all? { |number| number < 20 } #=> true
fibonacci.map { |number| number * 2 } #=> [0, 2, 2, 4, 6, 10, 16, 26]
أنت مراقب طيور شغوف يتابع عدد الطيور التي زارت حديقتك خلال الأيام السبعة الماضية.
لديك خمس مهام، وكلها تتعلق بأعداد الطيور التي زارت حديقتك.
لأغراض المقارنة، تحتفظ دائمًا بنسخة من أعداد الأسبوع الماضي قريبة منك، وهي: 0، 2، 5، 3، 7، 8 و4. نفّذ طريقة BirdCount.last_week التي تُرجع أعداد الأسبوع الماضي:
BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]
نفّذ طريقة BirdCount#yesterday لتُرجع عدد الطيور التي زارت حديقتك أمس. أعداد الطيور مرتبة حسب اليوم، حيث يكون العنصر الأول عدد أقدم يوم، والعنصر الأخير عدد اليوم.
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4
نفّذ طريقة BirdCount#total لتُرجع العدد الإجمالي للطيور التي زارت حديقتك:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19
بعض الأيام أكثر ازدحامًا من غيرها. اليوم المزدحم هو الذي زارت فيه خمسة طيور أو أكثر حديقتك.
نفّذ طريقة BirdCount#busy_days لتُرجع عدد الأيام المزدحمة:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2
نفّذ طريقة BirdCount#day_without_birds? التي تُرجع true إذا كان هناك يوم لم تزر فيه أي طيور الحديقة؛ وإلا، فأرجع false:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
سجّل في Exercism لتتعلّم وتتقن Ruby عبر 21 مفهومًا121 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.