ما هو السبب في تقييم أي وقت مضى تجزئة في بيرل في سياق العددية?

StackOverflow https://stackoverflow.com/questions/9384695

  •  28-10-2019
  •  | 
  •  

سؤال

أدرك أن تقييم مصفوفة في بيرل في سياق عددي مفيد:ينتج عنه # من العناصر.

ولكن ما هو الاستخدام العملي لتكون قادرة على تقييم تجزئة في سياق العددية?على سبيل المثال.

  • my $scalar_value = %hash;

  • scalar(%hash)

بقدر ما أفهم ، فإنه ينتج سلسلة مثل "3/4"إعطاء بعض المعلومات حول الأجزاء الداخلية للتجزئة التي يبدو أنها مفيدة فقط لتصحيح الأخطاء.

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

المحلول

ينتج قيمة يمكن استخدامها كعلامة صواب / خطأ لمعرفة ما إذا كانت التجزئة فارغة (بدون مفاتيح).

على سبيل المثال:

if (%hash) {
    print "Hash has elements\n";
} else {
    print "Hash is empty\n";
}

if يفرض التعبير في سياق عددي بسبب استخدامه كتعبير منطقي.

إنه مفهوم مشابه جدا لاستخدام @array في سياق عددي لاختبار الفراغ:

if (@array) {
    # NOT empty!
}

نصائح أخرى

العددية (٪التجزئة) يتيح لك معرفة ما اذا كان يعمل خوارزمية التجزئة بشكل صحيح.إذا كان لديك 1000 مفتاح وترى شيئا مثل 2/16 وهذا يعني أن جميع المفاتيح تحل إلى 2 فقط من 16 دلاء المخصصة.هذا يعني أن جميع مفاتيحك متشابهة جدا وتسبب الكثير من الاصطدامات ، مما يؤدي إلى عمليات بحث متسلسلة طويلة في المجموعة.

عدد الجرافات الافتراضي هو 8

perl -le '$h{a}=1;print scalar %h'
1/8

بريستاش التجزئة مع 1000 دلاء (إلى أقرب قوة من 2)

perl -le 'keys(%h) = 1000;$h{a}=1;print scalar %h'
1/1024

وهذا يساعد أيضا عندما يبارك تجزئة ل بيرل و.يمكنك تسريع الأمور إذا كنت تعلم أنه سيكون هناك الكثير من المفاتيح.

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