سؤال

أود أن أفهم التجزئة بشكل صحيح في بيرل. اضطررت إلى استخدام Perl بشكل متقطع لبعض الوقت وفي الغالب كلما احتجت إلى القيام بذلك ، فإنه يرتبط في الغالب بمعالجة النصوص.

وفي كل مرة ، يجب أن أتعامل مع التجزئة ، فإنه يفسد. أجد بناء الجملة خفيًا جدًا للتجزئة

التفسير الجيد للتجزئة ومراجع التجزئة ، واختلافاتها ، عندما تكون مطلوبة وما إلى ذلك سيكون موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

تجزئة بسيطة قريب من صفيف. تهيئاتهم تبدو متشابهة. أولا الصفيف:

@last_name = (
  "Ward",   "Cleaver",
  "Fred",   "Flintstone",
  "Archie", "Bunker"
);

الآن دعونا نمثل نفس المعلومات مع تجزئة (AKA AKA Consipiurive Array):

%last_name = (
  "Ward",   "Cleaver",
  "Fred",   "Flintstone",
  "Archie", "Bunker"
);

على الرغم من أن لديهم نفس الاسم ، المصفوفة @last_name والتجزئة %last_name مستقلة تماما.

مع المصفوفة ، إذا أردنا أن نعرف الاسم الأخير لأرتشي ، يتعين علينا إجراء بحث خطي:

my $lname;
for (my $i = 0; $i < @last_name; $i += 2) {
  $lname = $last_name[$i+1] if $last_name[$i] eq "Archie";
}
print "Archie $lname\n";

مع التجزئة ، إنه أكثر بناءًا:

print "Archie $last_name{Archie}\n";

لنفترض أننا نريد تمثيل المعلومات بهيكل أكثر ثراءً فقط:

  • Cleaver (الاسم الأخير)
    • جناح (الاسم الأول)
    • يونيو (الاسم الأول للزوج)
  • فلينتستون
    • فريد
    • ويلما
  • مخبأ
    • أرشي
    • إديث

قبل أن تأتي المراجع ، كانت تجزئة قيمة المفاتيح المسطحة حول أفضل ما يمكننا القيام به ، لكن المراجع تسمح

my %personal_info = (
    "Cleaver", {
        "FIRST",  "Ward",
        "SPOUSE", "June",
    },
    "Flintstone", {
        "FIRST",  "Fred",
        "SPOUSE", "Wilma",
    },
    "Bunker", {
        "FIRST",  "Archie",
        "SPOUSE", "Edith",
    },
);

داخليا ، مفاتيح وقيم %personal_info كلها منتشرة ، لكن القيم هي نوع خاص من العددية: مراجع التجزئة ، التي تم إنشاؤها مع {}. تتيح لنا المراجع محاكاة تجزئة "متعددة الأبعاد". على سبيل المثال ، يمكننا الوصول إلى ويلما عبر

$personal_info{Flintstone}->{SPOUSE}

لاحظ أن Perl يسمح لنا بحذف الأسهم بين الاشتراكات ، وبالتالي فإن ما سبق يعادل

$personal_info{Flintstone}{SPOUSE}

هذا كثير من الكتابة إذا كنت تريد معرفة المزيد عن فريد ، لذلك يمكنك الحصول على إشارة إلى نوع من المؤشر:

$fred = $personal_info{Flintstone};
print "Fred's wife is $fred->{SPOUSE}\n";

لان $fred في المقتطف أعلاه هو hashref ، السهم ضروري. إذا تركت الأمر ولكن تم تمكينه بحكمة use strict لمساعدتك في التقاط هذه الأنواع من الأخطاء ، سوف يشكو المترجم:

Global symbol "%fred" requires explicit package name at ...

تشبه مراجع Perl المؤشرات في C و C ++ ، لكنها لا يمكن أن تكون لاغية أبدًا. تتطلب المؤشرات في C و C ++ إزالة الإخلاء وكذلك المراجع في Perl.

تحتوي معلمات وظيفة C و C ++ على دلالات مرور على أساس القيمة: إنها مجرد نسخ ، لذلك لا تعود التعديلات إلى المتصل. إذا كنت تريد رؤية التغييرات ، فيجب عليك تمرير مؤشر. يمكنك الحصول على هذا التأثير مع المراجع في بيرل:

sub add_barney {
    my($personal_info) = @_;

    $personal_info->{Rubble} = {
        FIRST  => "Barney",
        SPOUSE => "Betty",
    };
}

add_barney \%personal_info;

بدون انتشار الخلفي ، add_barney كان من شأنه أن يحصل على نسخة تم إلقاؤها بمجرد عودة الفرعية.

لاحظ أيضًا استخدام "فاصلة الدهون" (=>) في الاعلى. إنها تلقائيات الأوتوماتيكية على اليسار وتجعل تهيئة التجزئة أقل صاخبة.

نصائح أخرى

يوضح ما يلي كيف يمكنك استخدام علامة تجزئة وتجزئة:

my %hash = (
    toy    => 'aeroplane',
    colour => 'blue',
);
print "I have an ", $hash{toy}, " which is coloured ", $hash{colour}, "\n";

my $hashref = \%hash;
print "I have an ", $hashref->{toy}, " which is coloured ", $hashref->{colour}, "\n";

انظر أيضا Perldoc perldsc.

التجزئة هو نوع بيانات أساسي في Perl. يستخدم مفاتيح للوصول إلى محتوياتها.

مرجع التجزئة هو اختصار للإشارة إلى تجزئة. المراجع هي القياس ، وهذا هو قيم بسيطة. إنها قيمة قياسية تحتوي بشكل أساسي على مؤشر إلى التجزئة الفعلية نفسها.

نهاية لهذه الغاية: الفرق بين Hash و Hash Ref في Perl - Obuntu Forums

الفرق هو أيضا في بناء الجملة للحذف. مثل C ، يعمل Perl مثل هذا من أجل التجزئة:

delete $hash{$key};

ومراجع التجزئة

delete $hash_ref->{$key};

ال بيرل هاش Howto هو مورد رائع لفهم التجزئة مقابل التجزئة مع مراجع التجزئة

هناك أيضًا رابط آخر هنا لديه المزيد من المعلومات حول Perl والمراجع.

نرى Perldoc perlreftut يمكن الوصول إليها أيضًا على سطر أوامر الكمبيوتر الخاص بك.

المرجع هو قيمة القياسية التي تشير إلى صفيف كامل أو تجزئة كاملة (أو إلى أي شيء آخر فقط). الأسماء هي نوع واحد من المرجع الذي كنت على دراية به بالفعل. فكر في رئيس الولايات المتحدة: كيس من الدم والعظام غير المريح. ولكن للحديث عنه ، أو لتمثيله في برنامج كمبيوتر ، كل ما تحتاجه هو السلسلة القياسية السهلة والمريحة "Barack Obama".

المراجع في Perl تشبه أسماء المصفوفات والتجزئة. إنها أسماء بيرل الداخلية الخاصة ، بحيث يمكنك التأكد من أنها لا لبس فيها. على عكس "باراك أوباما" ، تشير إشارة فقط إلى شيء واحد ، وأنت تعرف دائمًا ما يشير إليه. إذا كان لديك إشارة إلى صفيف ، فيمكنك استعادة الصفيف بالكامل منه. إذا كان لديك إشارة إلى علامة تجزئة ، فيمكنك استرداد التجزئة بأكملها. لكن المرجع لا يزال قيمة قياسية سهلة ومدمجة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top