الفرق بين المراجعتين لصفحة: «Ruby/Hash»
Khaled-yassin (نقاش | مساهمات) لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(3 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
< | <noinclude>{{DISPLAYTITLE: الصنف <code>Hash</code> في روبي}}</noinclude> | ||
النوع <code>Hash</code> (أو [[wikipedia:Hash_table|الجدول Hash]] كما يطلق عليه أحيانًا) هو مجموعة تشبه القاموس ويتكون من مفاتيح فريدة وقيم مرتبطة بها. كما يسمى أيضًا المصفوفات الترابطية، فهو يشبه [[Ruby/Array|المصفوفات]]، ولكن بينما تستخدم [[Ruby/Array|المصفوفة]] فقط الأعداد الصحيحة كفهرس، يسمح النوع <code>Hash</code> باستخدام أيٍّ من أنواع الكائنات لاستعمالها كفهرس وربطها بقيمٍ. | |||
</ | ترتَّب وتحصى القيم في النوع <code>Hash</code> بنفس الترتيب الذي أُدرِجت فيه مفاتيحها المقابلة. | ||
يمكن إنشاء جدول <code>Hash</code> بسهولة باستخدام شكله الصريح:<syntaxhighlight lang="ruby"> | |||
grades = { "Jane Doe" => 10, "Jim Doe" => 6 } | |||
يمكن | |||
</syntaxhighlight>يسمح الجدول <code>Hash</code> باستعمال [[Ruby/Symbol|الرموز]] كصيغة بديلة للمفاتيح. انظر مثلًا إلى المثال التالي:<syntaxhighlight lang="ruby"> | |||
options = { :font_size => 10, :font_family => "Arial" } | options = { :font_size => 10, :font_family => "Arial" } | ||
</syntaxhighlight>و يمكن أن تُكتب:<syntaxhighlight lang="ruby"> | </syntaxhighlight>و يمكن أن تُكتب أيضًا بالشكل التالي:<syntaxhighlight lang="ruby"> | ||
options = { font_size: 10, font_family: "Arial" } | options = { font_size: 10, font_family: "Arial" } | ||
</syntaxhighlight>كل مفتاح | </syntaxhighlight>كل مفتاح مُسمَّى هو [[Ruby/Symbol|رمز]] يمكن الوصول إليه في الجدول <code>Hash</code>:<syntaxhighlight lang="ruby"> | ||
options[:font_size] # => 10 | options[:font_size] # => 10 | ||
</syntaxhighlight>ويمكن أيضا أن | </syntaxhighlight>ويمكن أيضا أن إنشاء جدول <code>Hash</code> من خلال التابع <code>[[Ruby/Hash/new|new]]</code>:<syntaxhighlight lang="ruby"> | ||
grades = Hash.new | grades = Hash.new | ||
grades["Dorothy Doe"] = 9 | grades["Dorothy Doe"] = 9 | ||
</syntaxhighlight> | </syntaxhighlight>تملك الجداول <code>Hash</code> قيمةً افتراضيةً تُعاد عند الوصول إلى مفاتيح غير موجودة. إذا لم تُعيَّن قيمة افتراضية، فستُستخدم القيمة <code>nil</code>. ويمكن تعيين القيمة الافتراضية بتمريرها إلى [[Ruby/Hash/new|<code>new</code>]]:<syntaxhighlight lang="ruby"> | ||
grades = Hash.new(0) | grades = Hash.new(0) | ||
</syntaxhighlight>أو باستخدام التابع <code>default | </syntaxhighlight>أو باستخدام التابع [[Ruby/Hash/default-3D|<code>default</code>]]:<syntaxhighlight lang="ruby"> | ||
grades = {"Timmy Doe" => 8} | grades = {"Timmy Doe" => 8} | ||
grades.default = 0 | grades.default = 0 | ||
</syntaxhighlight>يتطلب الوصول إلى قيمة ما في Hash استخدام مفتاحها:<syntaxhighlight lang="ruby"> | </syntaxhighlight>يتطلب الوصول إلى قيمة ما في الجدول <code>Hash</code> استخدام مفتاحها:<syntaxhighlight lang="ruby"> | ||
puts grades["Jane Doe"] # => 0 | puts grades["Jane Doe"] # => 0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | ==استخدامات شائعة== | ||
يعد النوع <code>Hash</code> طريقةً سهلةً لتمثيل هياكل البيانات مثل:<syntaxhighlight lang="ruby"> | |||
books = {} | books = {} | ||
books[:matz] = "The Ruby Programming Language" | books[:matz] = "The Ruby Programming Language" | ||
books[:black] = "The Well-Grounded Rubyist" | books[:black] = "The Well-Grounded Rubyist" | ||
</syntaxhighlight>كما يشيع استخدام | </syntaxhighlight>كما يشيع استخدام النوع <code>Hash</code> كطريقة للحصول على [[Ruby/methods#.D8.A7.D9.84.D9.88.D8.B3.D8.A7.D8.A6.D8.B7 .D8.A7.D9.84.D9.85.D8.B3.D9.85.D8.A7.D8.A9|معاملات مسماة]] في الدوال. لاحظ أنَّه لا توجد أقواس مستخدمة في المثال في الأسفل. إذا كان النوع <code>Hash</code> هو الوسيط الأخير في استدعاء [[Ruby/methods|تابع]]، فلا يلزم استخدام أقواس، وبالتالي يمكن إنشاء واجهة مُرتَّبة جدًا:<syntaxhighlight lang="ruby"> | ||
Person.create(name: "John Doe", age: 27) | Person.create(name: "John Doe", age: 27) | ||
سطر 44: | سطر 43: | ||
end | end | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | ==المفاتيح في النوع <code>Hash</code>== | ||
يُشير كائنان إلى نفس | يُشير كائنان إلى نفس المفتاح في الجدول <code>Hash</code> عندما تكون القيمة المرتبطة بأحدهما مماثلة ومساوية للقيمة المرتبطة بالمفتاح الآخر. | ||
قد | قد يُستخدَم صنف معرف من قِبَل المستخدم كمفتاح إذا استُبدِل التابعَيْن <code>[[Ruby/Hash/hash|hash]]</code> و <code>[[Ruby/Hash/eql-3F|eql?]]</code> لتوفير سلوك ذو معنى. بشكل افتراضي، تشير النُسَخ المنفصلة إلى مفاتيح منفصلة. | ||
ويستند | ويستند التنفيذ النموذجي للتابع [[Ruby/Hash/hash|<code>hash</code>]] على بيانات الكائن، بينما يُعين عادةً اسم بديل للتابع <code>[[Ruby/Hash/eql-3F|eql?]]</code> يشير إلى المعامل <code>[[Ruby/Hash/equal|==]]</code> المُستبدَل:<syntaxhighlight lang="ruby"> | ||
class Book | class Book | ||
attr_reader :author, :title | attr_reader :author, :title | ||
سطر 80: | سطر 79: | ||
reviews.length #=> 1 | reviews.length #=> 1 | ||
</syntaxhighlight>انظر | </syntaxhighlight>انظر أيضًا التابع <code>[[Ruby/Object/hash|Object.hash]]</code> والتابع <code>[[Ruby/Object/eql-3F|Object.eql?]]</code>. | ||
==توابع الصنف العام== | |||
===<code>[[Ruby/Hash/index|Hash[]]]</code>=== | |||
ينشئ جدول <code>Hash</code> جديد ويضع فيه الكائنات المعطاة. | |||
=== | |||
===<code>[[Ruby/Hash/new|new]]</code>=== | |||
ينشئ جدول <code>Hash</code> جديد فارغ ثم يعيده. | |||
===<code>[[Ruby/Hash/try_convert|try_convert]]</code>=== | |||
يحاول تحويل الكائن المُمرَّر إليه إلى النوع <code>Hash</code> باستخدام التابع<code>[[Ruby/Hash/to hash|to_hash]]</code>. | |||
== توابع النسخة العامة == | |||
===<code>[[Ruby/Hash/lt|>]]</code>=== | |||
يعيد القيمة <code>true</code> إذا كان الكائن <code>Hash</code> الواقع على يساره مجموعةً فرعيةً من الكائن الواقع على يمينه. | |||
===<code>[[Ruby/Hash/le|=>]]</code>=== | |||
يعيد القيمة <code>true</code> إذا كان الكائن <code>Hash</code> الواقع على يساره مجموعةً فرعيةً من الكائن الواقع على يمينه أو يساويه تمامًا. | |||
===<code>[[Ruby/Hash/equal|==]]</code>=== | |||
يتحقق من تساوي كائنين من النوع <code>Hash</code>. | |||
===<code>[[Ruby/Hash/gt|<]]</code>=== | |||
يعيد القيمة <code>true</code> إذا كان الكائن الواقع على يمينه مجموعةً فرعيةً من الكائن الواقع على يساره. | |||
===<code>[[Ruby/Hash/ge|=<]]</code>=== | |||
يعيد المعامل <code>=<</code> القيمة <code>true</code> إذا كان الكائن الواقع على يمينه مجموعةً فرعيةً من الكائن الواقع على يساره أو يساويه تمامًا. | |||
===<code>[[Ruby/Hash/5B-5D|[]]]</code>=== | |||
يجلب القيمة المقابلة لمفتاح معين في الجدول <code>Hash</code> المعطى. | |||
===<code>[[Ruby/Hash/5B-5D-3D|=[]]]</code>=== | |||
يربط عند استدعائه بالشكل <code>hsh[key] = value</code> القيمة <code>value</code> المعطاة بالمفتاح<code>key</code> في الجدول <code>Hash</code>. | |||
===<code>[[Ruby/Hash/any-3F|any?]]</code>=== | |||
يمرر كل زوج من مفتاح/قيمة من أزواج الكائن <code>[[Ruby/Hash|Hash]]</code> المعطى إلى كتلة معينة ثم يعيد القيمة <code>true</code> إن أعادت الكتلة قيمة غير القيمة <code>false</code> أو <code>nil</code>. | |||
===<code>[[Ruby/Hash/assoc|assoc]]</code>=== | |||
يبحث ضمن الكائن <code>[[Ruby/Hash|Hash]]</code> عن طريق موازنة الكائن المُمرَّر إليه بمفاتيحه باستخدام المعامل <code>[[Ruby/Hash/equal|==]]</code> ثم يعيد الزوج قيمة-مفتاح (مصفوفة من عنصرين) أو <code>nil</code> إذا لم يعثر على أي تطابق. | |||
===<code>[[Ruby/Hash/clear|clear]]</code>=== | |||
يزيل جميع الأزواج قيمة-مفتاح من الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/compact|compact]]</code>=== | |||
يعيد كائن <code>Hash</code> جديد يحوي جميع الأزواج قيم/مفاتيح للكائن الذي استدعي معه باستثناء الأزواج المعدومة (أي ذات القيمة <code>nil</code>). | |||
===<code>[[Ruby/Hash/compact!|compact!]]</code>=== | |||
يزيل جميع الأزواج قيمة/مفتاح المعدومة (أي ذات القيمة <code>nil</code>) من الكائن الذي استدعي معه. | |||
===<code>[[Ruby/Hash/compare_by_identity|compare_by_identity]]</code>=== | |||
يجعل الكائن <code>[[Ruby/Hash|Hash]]</code> يقارن مفاتيحه بواسطة مُعرِّفاتها، أي أنَّها سوف تُعدُّ نفس الكائنات على أنَّها نفس المفاتيح. | |||
===<code>[[Ruby/Hash/compare_by_identity-3F|compare_by_identity?]]</code>=== | |||
يتحقق إذا كان الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه سيقارن مفاتيحه بواسطة مُعرِّفاتهم. | |||
===<code>[[Ruby/Hash/default|default]]</code>=== | |||
يعيد القيمة الافتراضية للمفتاح المُمرَّر إليه؛ أي يعيد القيمة التي سيعيدها الكائن<code>[[Ruby/Hash|Hash]]</code> إذا كان المفتاح غير موجود فيه. | |||
===[[Ruby/Hash/default-3D|<code rel="mw:WikiLink" href="Ruby/Hash/default-3D" title="Ruby/Hash/default-3D">=default</code>]]=== | |||
يضبط عند استدعائه بالشكل <code>default = obj</code> القيمة الافتراضية <code>obj</code> وهي القيمة التي ستُعاد لمفتاح غير موجود في الكائن <code>[[Ruby/Hash|Hash]]</code>. | |||
===<code>[[Ruby/Hash/default_proc|default_proc]]</code>=== | |||
يعيد الكتلة التي استُدعي التابع <code>[[Ruby/Hash/new|new]]</code> معها عند إنشاء الكائن <code>[[Ruby/Hash|Hash]]</code>المعطى، وإلا سيُعيد القيمة <code>nil</code>. | |||
===<code>[[Ruby/Hash/default_proc-3D|=default_proc]]</code>=== | |||
= | يضبط إن استدعي بالشكل <code>default_proc = proc_obj</code> القيمة الافتراضية للكتلة التي ستُنفَّذ عند فشل أية عملية بحث عن مفتاح للكائن <code>[[Ruby/Hash|Hash]]</code> المعطى. | ||
===<code>[[Ruby/Hash/delete|delete]]</code>=== | |||
يحذف زوجًا ذا مفتاح محدَّد ويعيد قيمته من الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/delete_if|delete_if]]</code>=== | |||
يحذف كل زوج قيمة-مفتاح يحقق شرطًا معيَّنًا من أزواج الكائن <code>[[Ruby/Hash|Hash]]</code> المعطى. | |||
===<code>[[Ruby/Hash/dig|dig]]</code>=== | |||
يستخرج القيمة المتداخلة المحددة بواسطة تسلسل كائنات تمثِّل المفاتيح عن طريق استدعاء <code>dig</code> في كل خطوة، ويعيد القيمة <code>nil</code> إذا كانت أي خطوة متوسطة هي <code>nil</code>. | |||
===<code>[[Ruby/Hash/each|each]]</code>=== | |||
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح أزواج الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه بعد تمرير مفتاح وقيمة الأزواج إليها. | |||
===<code>[[Ruby/Hash/each_key|each_key]]</code>=== | |||
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح أزواج الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه بعد تمرير مفتاح كل زوج إليها. | |||
===<code>[[Ruby/Hash/each_pair|each_pair]]</code>=== | |||
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح أزواج الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه بعد تمرير مفتاح وقيمة الأزواج إليها. | |||
===<code>[[Ruby/Hash/each_value|each_value]]</code>=== | |||
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح أزواج الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه بعد تمرير قيمة كل زوج إليها. | |||
===<code>[[Ruby/Hash/empty-3F|empty?]]</code>=== | |||
يتحقق إذا كان الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه فارغًا أي لا يحتوي على أية أزواج. | |||
===<code>[[Ruby/Hash/eql-3F|eql?]]</code>=== | |||
يتحقق إذا كان كائنان من نفس النوع (النوع <code>[[Ruby/Hash|Hash]]</code>) ولهما نفس المحتوى. لا يؤخذ ترتيب الأزواج بالحسبان. | |||
===<code>[[Ruby/Hash/fetch|fetch]]</code>=== | |||
يعيد قيمة من الكائن <code>[[Ruby/Hash|Hash]]</code> لمفتاح معين. | |||
===<code>[[Ruby/Hash/fetch_values|fetch_values]]</code>=== | |||
يعيد مصفوفة تحتوي على القيم المقترنة بالمفاتيح المعطاة. | |||
===<code>[[Ruby/Hash/flatten|flatten]]</code>=== | |||
يعيد مصفوفة جديدة والتي تكون تسطيح أحادي الأبعاد للكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/has_key-3F|has_key?]]</code>=== | |||
يتحقق إذا كان مفتاحٌ معيَّن موجودًا في الكائن <code>[[Ruby/Hash|Hash]]</code> المعطى. | |||
===<code>[[Ruby/Hash/has_value-3F|has_value?]]</code>=== | |||
يعيد إذا كانت قيمةٌ معيَّنةٌ موجودةً في الكائن <code>[[Ruby/Hash|Hash]]</code> المعطى ومرتبطة بمفتاح. | |||
===<code>[[Ruby/Hash/hash|hash]]</code>=== | |||
يحسب الشيفرة hash للكائن <code>[[Ruby/Hash|Hash]]</code> المستدعى معها. | |||
===<code>[[Ruby/Hash/include-3F|include?]]</code>=== | |||
يعيد إذا كان مفتاحٌ معيَّن موجودًا في الكائن <code>[[Ruby/Hash|Hash]]</code> المعطى. | |||
===<code>[[Ruby/Hash/inspect|inspect]]</code>=== | |||
يعيد محتوى الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه في سلسلة نصية. | |||
===<code>[[Ruby/Hash/invert|invert]]</code>=== | |||
يعيد كائن جديد من النوع <code>[[Ruby/Hash|Hash]]</code> يحوي قيم الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه كمفاتيح ومفاتيحه كقيم فيه. | |||
===<code>[[Ruby/Hash/keep_if|keep_if]]</code>=== | |||
يبقي كل زوج قيمة-مفتاح يحقق شرطًا معيَّنًا من أزواج الكائن <code>[[Ruby/Hash|Hash]]</code> المعطى. | |||
===<code>[[Ruby/Hash/key|key]]</code>=== | |||
يعيد المفتاح المقابل لقيمة معيَّنة في الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
إذا | ===<code>[[Ruby/Hash/key-3F|key?]]</code>=== | ||
يتحقق إذا كان مفتاحٌ محدَّدٌ موجودًا في الكائن <code>[[Ruby/Hash|Hash]]</code> المستدعى معه. | |||
===<code>[[Ruby/Hash/keys|keys]]</code>=== | |||
يعيد مصفوفة جديدة تحوي مفاتيح الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/length|length]]</code>=== | |||
يعيد عدد الأزواج قيمة-مفتاح الموجودة في الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/member-3F|member?]]</code>=== | |||
يتحقق إذا كان مفتاحٌ معيَّن موجودًا في الكائن <code>[[Ruby/Hash|Hash]]</code> المعطى. | |||
===<code>[[Ruby/Hash/merge|merge]]</code>=== | |||
يدمج كائنين من النوع <code>[[Ruby/Hash|Hash]]</code> مع بعضهما بعضًا في كائن جديد من النوع <code>[[Ruby/Hash|Hash]]</code> ثم يعيده. | |||
===<code>[[Ruby/Hash/merge!|merge!]]</code>=== | |||
يضيف محتويات الكائن <code>[[Ruby/Hash|Hash]]</code> الذي مُمرِّر إليه إلى الكائن الذي استدعي معه. | |||
===<code>[[Ruby/Hash/rassoc|rassoc]]</code>=== | |||
يبحث خلال الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه عن طريق مقارنة القيمة التي مُمرِّرت إليه مع قيم ذلك الكائن باستخدام المعامل <code>[[Ruby/Hash/equal|==]]</code> ثم يعيد أول زوج قيمة-مفتاح متطابق. | |||
===<code>[[Ruby/Hash/rehash|rehash]]</code>=== | |||
يعيد بناء الكائن <code>[[Ruby/Hash|Hash]]</code> استنادًا إلى القيم الحالية لكل مفتاح. | |||
===<code>[[Ruby/Hash/reject|reject]]</code>=== | |||
يعيد كائن جديد من النوع <code>[[Ruby/Hash|Hash]]</code> يتكون من الأزواج التي ترفضها الكتلة المعطاة. | |||
===<code>[[Ruby/Hash/reject!|reject!]]</code>=== | |||
يحذف الأزواج التي ترفضها الكتلة المعطاة من الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/replace|replace]]</code>=== | |||
يُبدِّل محتويات الكائن المُمرَّر إليه مكان محتويات الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/select|select]]</code>=== | |||
يعيد كائن جديد من النوع <code>[[Ruby/Hash|Hash]]</code> يتكون من العناصر التي تعيد الكتلة المعطاة معها القيمة <code>true</code>. | |||
===<code>[[Ruby/Hash/select!|select!]]</code>=== | |||
يحذف الأزواج التي تقبلها الكتلة المعطاة من الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/shift|shift]]</code>=== | |||
يزيل زوجًا من قيمة-مفتاح من الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه ويعيده في مصفوفة، أو يعيد القيمة الافتراضية لهذا الكائن إذا كان فارغًا. | |||
===<code>[[Ruby/Hash/size|size]]</code>=== | |||
يعيد عدد الأزواج القيمة-المفتاح الموجودة في الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/slice|slice]]</code>=== | |||
يعيد كائنًا من النوع <code>[[Ruby/Hash|Hash]]</code> يحتوي فقط على مفاتيح محدَّدة وقيمها. | |||
===<code>[[Ruby/Hash/store|store]]</code>=== | |||
يربط قيمة محددة مع مفتاح محدد في الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
<code> | ===<code>[[Ruby/Hash/to_a|to_a]]</code>=== | ||
يحول الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه إلى مصفوفة متشعبة من المصفوفات <code>[ key, value ]</code>. | |||
===<code>[[Ruby/Hash/to_h|to_h]]</code>=== | |||
يعيد الكائن [[Ruby/Hash|<code>Hash</code>]] المعطى نفسه. إذا استُدعي على صنف فرعي من <code>[[Ruby/Hash|Hash]]</code>، فستحوِّل المستقبل إلى كائن من النوع <code>[[Ruby/Hash|Hash]]</code>. | |||
===<code>[[Ruby/Hash/to_hash|to_hash]]</code>=== | |||
يعيد الكائن [[Ruby/Hash|<code>Hash</code>]] المعطى نفسه. | |||
===<code>[[Ruby/Hash/to_proc|to_proc]]</code>=== | |||
===<code>[[Ruby/Hash/to_s|to_s]]</code>=== | |||
يعيد محتوى الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه في سلسلة نصية. | |||
===<code>[[Ruby/Hash/transform_keys|transform_keys]]</code>=== | |||
يعيد كائن جديد من النوع <code>[[Ruby/Hash|Hash]]</code> مع ناتج تنفيذ الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/transform_keys!|transform_keys!]]</code>=== | |||
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح الكائن [[Ruby/Hash|<code>Hash</code>]] المعطى، ويستبدل به المفتاح الجديد الذي تعيده الكتلة، ثم يعيد هذا الكائن. | |||
===<code>[[Ruby/Hash/transform_values|transform_values]]</code>=== | |||
يعيد كائن جديد من النوع <code>[[Ruby/Hash|Hash]]</code> مع ناتج تنفيذ الكتلة المعطاة مرةً واحدةً لكل قيمة من قيم الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/transform_values!|transform_values!]]</code>=== | |||
يستدعي الكتلة المعطاة مرةً واحدةً لكل قيمة من قيم الكائن [[Ruby/Hash|<code>Hash</code>]] المعطى، ويستبدل به القيمة الجديد التي تعيدها الكتلة، ثم يعيد هذا الكائن. لا يُغيّر هذا التابع المفاتيح. | |||
===<code>[[Ruby/Hash/update|update]]</code>=== | |||
يضيف محتويات الكائن المُمرَّر إليه إلى الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/value-3F|value?]]</code>=== | |||
يتحقق إذا كانت القيمة المُمرَّرة إليه موجودةً ومرتبطةً بمفتاح ما في الكائن <code>[[Ruby/Hash|Hash]]</code> المعطى. | |||
===<code>[[Ruby/Hash/values|values]]</code>=== | |||
يعيد مصفوفة جديدة تحوي قيم الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
===<code>[[Ruby/Hash/values_at|values_at]]</code>=== | |||
يعيد مصفوفةً تحتوي على القيم المرتبطة بمفاتيح محدَّدة من الكائن <code>[[Ruby/Hash|Hash]]</code> الذي استدعي معه. | |||
== ملاحظات إضافية == | |||
====<code> | تأتي بعض التوابع التي يستخدمها البعض مع الكائن <code>Hash</code> من الوحدة <code>[[Ruby/Enumerable|Enumerable]]</code>. | ||
إذا لم تعثر على ما تبحث عنه في هذا التوثيق، فاطلع على توثيق <code>[[Ruby/Enumerable|Enumerable]]</code>. | |||
=مصادر= | =مصادر= | ||
* | * <span> </span>[http://ruby-doc.org/core-2.5.1/Hash.html صفحة الصنف Hash في توثيق روبي الرسمي.] | ||
[[تصنيف:Ruby]] | [[تصنيف:Ruby]] | ||
[[تصنيف:Ruby Class]] | |||
[[تصنيف:Ruby Hash]] |
المراجعة الحالية بتاريخ 07:32، 13 يناير 2019
النوع Hash
(أو الجدول Hash كما يطلق عليه أحيانًا) هو مجموعة تشبه القاموس ويتكون من مفاتيح فريدة وقيم مرتبطة بها. كما يسمى أيضًا المصفوفات الترابطية، فهو يشبه المصفوفات، ولكن بينما تستخدم المصفوفة فقط الأعداد الصحيحة كفهرس، يسمح النوع Hash
باستخدام أيٍّ من أنواع الكائنات لاستعمالها كفهرس وربطها بقيمٍ.
ترتَّب وتحصى القيم في النوع Hash
بنفس الترتيب الذي أُدرِجت فيه مفاتيحها المقابلة.
يمكن إنشاء جدول Hash
بسهولة باستخدام شكله الصريح:
grades = { "Jane Doe" => 10, "Jim Doe" => 6 }
يسمح الجدول Hash
باستعمال الرموز كصيغة بديلة للمفاتيح. انظر مثلًا إلى المثال التالي:
options = { :font_size => 10, :font_family => "Arial" }
و يمكن أن تُكتب أيضًا بالشكل التالي:
options = { font_size: 10, font_family: "Arial" }
كل مفتاح مُسمَّى هو رمز يمكن الوصول إليه في الجدول Hash
:
options[:font_size] # => 10
ويمكن أيضا أن إنشاء جدول Hash
من خلال التابع new
:
grades = Hash.new
grades["Dorothy Doe"] = 9
تملك الجداول Hash
قيمةً افتراضيةً تُعاد عند الوصول إلى مفاتيح غير موجودة. إذا لم تُعيَّن قيمة افتراضية، فستُستخدم القيمة nil
. ويمكن تعيين القيمة الافتراضية بتمريرها إلى new
:
grades = Hash.new(0)
أو باستخدام التابع default
:
grades = {"Timmy Doe" => 8}
grades.default = 0
يتطلب الوصول إلى قيمة ما في الجدول Hash
استخدام مفتاحها:
puts grades["Jane Doe"] # => 0
استخدامات شائعة
يعد النوع Hash
طريقةً سهلةً لتمثيل هياكل البيانات مثل:
books = {}
books[:matz] = "The Ruby Programming Language"
books[:black] = "The Well-Grounded Rubyist"
كما يشيع استخدام النوع Hash
كطريقة للحصول على معاملات مسماة في الدوال. لاحظ أنَّه لا توجد أقواس مستخدمة في المثال في الأسفل. إذا كان النوع Hash
هو الوسيط الأخير في استدعاء تابع، فلا يلزم استخدام أقواس، وبالتالي يمكن إنشاء واجهة مُرتَّبة جدًا:
Person.create(name: "John Doe", age: 27)
def self.create(params)
@name = params[:name]
@age = params[:age]
end
المفاتيح في النوع Hash
يُشير كائنان إلى نفس المفتاح في الجدول Hash
عندما تكون القيمة المرتبطة بأحدهما مماثلة ومساوية للقيمة المرتبطة بالمفتاح الآخر.
قد يُستخدَم صنف معرف من قِبَل المستخدم كمفتاح إذا استُبدِل التابعَيْن hash
و eql?
لتوفير سلوك ذو معنى. بشكل افتراضي، تشير النُسَخ المنفصلة إلى مفاتيح منفصلة.
ويستند التنفيذ النموذجي للتابع hash
على بيانات الكائن، بينما يُعين عادةً اسم بديل للتابع eql?
يشير إلى المعامل ==
المُستبدَل:
class Book
attr_reader :author, :title
def initialize(author, title)
@author = author
@title = title
end
def ==(other)
self.class === other and
other.author == @author and
other.title == @title
end
alias eql? ==
def hash
@author.hash ^ @title.hash # XOR
end
end
book1 = Book.new 'matz', 'Ruby in a Nutshell'
book2 = Book.new 'matz', 'Ruby in a Nutshell'
reviews = {}
reviews[book1] = 'Great reference!'
reviews[book2] = 'Nice and compact!'
reviews.length #=> 1
انظر أيضًا التابع Object.hash
والتابع Object.eql?
.
توابع الصنف العام
Hash[]
ينشئ جدول Hash
جديد ويضع فيه الكائنات المعطاة.
new
ينشئ جدول Hash
جديد فارغ ثم يعيده.
try_convert
يحاول تحويل الكائن المُمرَّر إليه إلى النوع Hash
باستخدام التابعto_hash
.
توابع النسخة العامة
>
يعيد القيمة true
إذا كان الكائن Hash
الواقع على يساره مجموعةً فرعيةً من الكائن الواقع على يمينه.
=>
يعيد القيمة true
إذا كان الكائن Hash
الواقع على يساره مجموعةً فرعيةً من الكائن الواقع على يمينه أو يساويه تمامًا.
==
يتحقق من تساوي كائنين من النوع Hash
.
<
يعيد القيمة true
إذا كان الكائن الواقع على يمينه مجموعةً فرعيةً من الكائن الواقع على يساره.
=<
يعيد المعامل =<
القيمة true
إذا كان الكائن الواقع على يمينه مجموعةً فرعيةً من الكائن الواقع على يساره أو يساويه تمامًا.
[]
يجلب القيمة المقابلة لمفتاح معين في الجدول Hash
المعطى.
=[]
يربط عند استدعائه بالشكل hsh[key] = value
القيمة value
المعطاة بالمفتاحkey
في الجدول Hash
.
any?
يمرر كل زوج من مفتاح/قيمة من أزواج الكائن Hash
المعطى إلى كتلة معينة ثم يعيد القيمة true
إن أعادت الكتلة قيمة غير القيمة false
أو nil
.
assoc
يبحث ضمن الكائن Hash
عن طريق موازنة الكائن المُمرَّر إليه بمفاتيحه باستخدام المعامل ==
ثم يعيد الزوج قيمة-مفتاح (مصفوفة من عنصرين) أو nil
إذا لم يعثر على أي تطابق.
clear
يزيل جميع الأزواج قيمة-مفتاح من الكائن Hash
الذي استدعي معه.
compact
يعيد كائن Hash
جديد يحوي جميع الأزواج قيم/مفاتيح للكائن الذي استدعي معه باستثناء الأزواج المعدومة (أي ذات القيمة nil
).
compact!
يزيل جميع الأزواج قيمة/مفتاح المعدومة (أي ذات القيمة nil
) من الكائن الذي استدعي معه.
compare_by_identity
يجعل الكائن Hash
يقارن مفاتيحه بواسطة مُعرِّفاتها، أي أنَّها سوف تُعدُّ نفس الكائنات على أنَّها نفس المفاتيح.
compare_by_identity?
يتحقق إذا كان الكائن Hash
الذي استدعي معه سيقارن مفاتيحه بواسطة مُعرِّفاتهم.
default
يعيد القيمة الافتراضية للمفتاح المُمرَّر إليه؛ أي يعيد القيمة التي سيعيدها الكائنHash
إذا كان المفتاح غير موجود فيه.
=default
يضبط عند استدعائه بالشكل default = obj
القيمة الافتراضية obj
وهي القيمة التي ستُعاد لمفتاح غير موجود في الكائن Hash
.
default_proc
يعيد الكتلة التي استُدعي التابع new
معها عند إنشاء الكائن Hash
المعطى، وإلا سيُعيد القيمة nil
.
=default_proc
يضبط إن استدعي بالشكل default_proc = proc_obj
القيمة الافتراضية للكتلة التي ستُنفَّذ عند فشل أية عملية بحث عن مفتاح للكائن Hash
المعطى.
delete
يحذف زوجًا ذا مفتاح محدَّد ويعيد قيمته من الكائن Hash
الذي استدعي معه.
delete_if
يحذف كل زوج قيمة-مفتاح يحقق شرطًا معيَّنًا من أزواج الكائن Hash
المعطى.
dig
يستخرج القيمة المتداخلة المحددة بواسطة تسلسل كائنات تمثِّل المفاتيح عن طريق استدعاء dig
في كل خطوة، ويعيد القيمة nil
إذا كانت أي خطوة متوسطة هي nil
.
each
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح أزواج الكائن Hash
الذي استدعي معه بعد تمرير مفتاح وقيمة الأزواج إليها.
each_key
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح أزواج الكائن Hash
الذي استدعي معه بعد تمرير مفتاح كل زوج إليها.
each_pair
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح أزواج الكائن Hash
الذي استدعي معه بعد تمرير مفتاح وقيمة الأزواج إليها.
each_value
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح أزواج الكائن Hash
الذي استدعي معه بعد تمرير قيمة كل زوج إليها.
empty?
يتحقق إذا كان الكائن Hash
الذي استدعي معه فارغًا أي لا يحتوي على أية أزواج.
eql?
يتحقق إذا كان كائنان من نفس النوع (النوع Hash
) ولهما نفس المحتوى. لا يؤخذ ترتيب الأزواج بالحسبان.
fetch
يعيد قيمة من الكائن Hash
لمفتاح معين.
fetch_values
يعيد مصفوفة تحتوي على القيم المقترنة بالمفاتيح المعطاة.
flatten
يعيد مصفوفة جديدة والتي تكون تسطيح أحادي الأبعاد للكائن Hash
الذي استدعي معه.
has_key?
يتحقق إذا كان مفتاحٌ معيَّن موجودًا في الكائن Hash
المعطى.
has_value?
يعيد إذا كانت قيمةٌ معيَّنةٌ موجودةً في الكائن Hash
المعطى ومرتبطة بمفتاح.
hash
يحسب الشيفرة hash للكائن Hash
المستدعى معها.
include?
يعيد إذا كان مفتاحٌ معيَّن موجودًا في الكائن Hash
المعطى.
inspect
يعيد محتوى الكائن Hash
الذي استدعي معه في سلسلة نصية.
invert
يعيد كائن جديد من النوع Hash
يحوي قيم الكائن Hash
الذي استدعي معه كمفاتيح ومفاتيحه كقيم فيه.
keep_if
يبقي كل زوج قيمة-مفتاح يحقق شرطًا معيَّنًا من أزواج الكائن Hash
المعطى.
key
يعيد المفتاح المقابل لقيمة معيَّنة في الكائن Hash
الذي استدعي معه.
key?
يتحقق إذا كان مفتاحٌ محدَّدٌ موجودًا في الكائن Hash
المستدعى معه.
keys
يعيد مصفوفة جديدة تحوي مفاتيح الكائن Hash
الذي استدعي معه.
length
يعيد عدد الأزواج قيمة-مفتاح الموجودة في الكائن Hash
الذي استدعي معه.
member?
يتحقق إذا كان مفتاحٌ معيَّن موجودًا في الكائن Hash
المعطى.
merge
يدمج كائنين من النوع Hash
مع بعضهما بعضًا في كائن جديد من النوع Hash
ثم يعيده.
merge!
يضيف محتويات الكائن Hash
الذي مُمرِّر إليه إلى الكائن الذي استدعي معه.
rassoc
يبحث خلال الكائن Hash
الذي استدعي معه عن طريق مقارنة القيمة التي مُمرِّرت إليه مع قيم ذلك الكائن باستخدام المعامل ==
ثم يعيد أول زوج قيمة-مفتاح متطابق.
rehash
يعيد بناء الكائن Hash
استنادًا إلى القيم الحالية لكل مفتاح.
reject
يعيد كائن جديد من النوع Hash
يتكون من الأزواج التي ترفضها الكتلة المعطاة.
reject!
يحذف الأزواج التي ترفضها الكتلة المعطاة من الكائن Hash
الذي استدعي معه.
replace
يُبدِّل محتويات الكائن المُمرَّر إليه مكان محتويات الكائن Hash
الذي استدعي معه.
select
يعيد كائن جديد من النوع Hash
يتكون من العناصر التي تعيد الكتلة المعطاة معها القيمة true
.
select!
يحذف الأزواج التي تقبلها الكتلة المعطاة من الكائن Hash
الذي استدعي معه.
shift
يزيل زوجًا من قيمة-مفتاح من الكائن Hash
الذي استدعي معه ويعيده في مصفوفة، أو يعيد القيمة الافتراضية لهذا الكائن إذا كان فارغًا.
size
يعيد عدد الأزواج القيمة-المفتاح الموجودة في الكائن Hash
الذي استدعي معه.
slice
يعيد كائنًا من النوع Hash
يحتوي فقط على مفاتيح محدَّدة وقيمها.
store
يربط قيمة محددة مع مفتاح محدد في الكائن Hash
الذي استدعي معه.
to_a
يحول الكائن Hash
الذي استدعي معه إلى مصفوفة متشعبة من المصفوفات [ key, value ]
.
to_h
يعيد الكائن Hash
المعطى نفسه. إذا استُدعي على صنف فرعي من Hash
، فستحوِّل المستقبل إلى كائن من النوع Hash
.
to_hash
يعيد الكائن Hash
المعطى نفسه.
to_proc
to_s
يعيد محتوى الكائن Hash
الذي استدعي معه في سلسلة نصية.
transform_keys
يعيد كائن جديد من النوع Hash
مع ناتج تنفيذ الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح الكائن Hash
الذي استدعي معه.
transform_keys!
يستدعي الكتلة المعطاة مرةً واحدةً لكل مفتاح من مفاتيح الكائن Hash
المعطى، ويستبدل به المفتاح الجديد الذي تعيده الكتلة، ثم يعيد هذا الكائن.
transform_values
يعيد كائن جديد من النوع Hash
مع ناتج تنفيذ الكتلة المعطاة مرةً واحدةً لكل قيمة من قيم الكائن Hash
الذي استدعي معه.
transform_values!
يستدعي الكتلة المعطاة مرةً واحدةً لكل قيمة من قيم الكائن Hash
المعطى، ويستبدل به القيمة الجديد التي تعيدها الكتلة، ثم يعيد هذا الكائن. لا يُغيّر هذا التابع المفاتيح.
update
يضيف محتويات الكائن المُمرَّر إليه إلى الكائن Hash
الذي استدعي معه.
value?
يتحقق إذا كانت القيمة المُمرَّرة إليه موجودةً ومرتبطةً بمفتاح ما في الكائن Hash
المعطى.
values
يعيد مصفوفة جديدة تحوي قيم الكائن Hash
الذي استدعي معه.
values_at
يعيد مصفوفةً تحتوي على القيم المرتبطة بمفاتيح محدَّدة من الكائن Hash
الذي استدعي معه.
ملاحظات إضافية
تأتي بعض التوابع التي يستخدمها البعض مع الكائن Hash
من الوحدة Enumerable
.
إذا لم تعثر على ما تبحث عنه في هذا التوثيق، فاطلع على توثيق Enumerable
.