سؤال

يمكن أن تشير إلى شخص جيد الوحدة في بيرل والتي يمكن استخدامها لتخزين مجموعة من الكائنات ؟

أو هو مجموعة بديلا جيدا بما فيه الكفاية بالنسبة لمعظم الاحتياجات ؟

تحديث: أنا أبحث عن مجموعات الطبقة لأنني أريد أن تكون قادرة على القيام بعملية مثل حساب المجموعة على مستوى المنشأة من كل عنصر.

منذ أن كنت تحتاج إلى إجراء العديد من هذه العمليات ، وأنا قد وكذلك كتابة الدرجة التي يمكن تمديدها من قبل كائنات فردية.وهذه الفئة من الواضح أن العمل مع المصفوفات (أو قد يكون التجزئة).

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

المحلول

هناك مجموعة وحدات هياكل أكثر تعقيدا ، ولكن هذا هو النمط الشائع في بيرل استخدام صفائف صفائف أكوام القوائم.بيرل وقد بنيت في وظائف باستخدام مجموعة كومة أو قائمة :دفع/البوب, التحول/unshift ، لصق (إدراج أو إزالة في الوسط) و foreach شكل التكرار.

بيرل أيضا خريطة يسمى hashmap وهو ما يعادل القاموس في بيثون - مما يسمح لك أن يكون هناك رابطة بين مفتاح واحد و قيمة واحدة.

بيرل المطورين في كثير من الأحيان يؤلف هذين البيانات-هياكل لبناء ما يحتاجون إليه الحاجة متعددة القيم ؟ متجر مجموعة مراجع في قيمة جزء من hashtable (خريطة).الأشجار يمكن أن يبنى بطريقة مماثلة - إذا كنت بحاجة إلى مفاتيح فريدة من نوعها ، استخدام مستويات متعددة من hashmaps ، أو إذا كنت لا تستخدم متداخلة مجموعة من المراجع.

هذين بدائية جمع أنواع في بيرل لم يكن لديك كائن المنحى api, لكنها لا تزال مجموعات.

إذا كنت تبحث عن CPAN ستجد المرجح أن وحدات أخرى وجوه المنحى هياكل البيانات, انها حقا يتوقف على الحاجة الخاصة بك.هل هناك معين بنية البيانات تحتاج إلى جانب قائمة كومة أو الخريطة ؟ قد تحصل على أكثر إجابة محددة (على سبيل المثال محدد وحدة) إذا كنت تسأل عن معين بنية البيانات.

نسيت أن أذكر, إذا كنت تبحث عن رمز صغير أمثلة عبر مجموعة متنوعة من اللغات ، PLEAC (لغة البرمجة أمثلة على حد سواء طبخ) هو لائق الموارد.

نصائح أخرى

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

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

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

my $record = get_complex_structure();
# $record = {
#    'widgets' => {
#        name => 'ACME Widgets',
#        skus => [ 'WIDG01', 'WIDG02', 'WIDG03' ],
#        sales => {
#            WIDG01 => { num => 25, value => 105.24 },
#            WIDG02 => { num => 10, value => 80.02 },
#            WIDG03 => { num => 8,  value => 205.80 },
#        },
#    },
#    ### and so on for 'grommets', 'nuts', 'bolts' etc.
# }

my @standouts =
    map { $_->[0] }
    sort {
        $b->[2] <=> $a->[2] 
     || $b->[1] <=> $a->[1]
     || $record->{$a->[0]}->{name} cmp $record->{$b->[0]}->{name}
    }
    map {
        my ($num, $value);
        for my $sku (@{$record->{$_}{skus}}) {
            $num   += $record->{$_}{sales}{$sku}{num};
            $value += $record->{$_}{sales}{$sku}{value};
        }
        [ $_, $num, $value ];
    }
    keys %$record;

القراءة من الخلف إلى الأمام ، Schwarztian تحويل لا ثلاثة أشياء:

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

2) كتلة التالي يأخذ في عدد من arrayrefs وفرزها أ) أولا بمقارنة إجمالي قيمة عدديا ، تنازلي الأوامر ؛ ب) إذا كانت القيم متساوية ، من خلال مقارنة عدد المعاملات عدديا في ترتيب تنازلي ، ج) إذا فشل ذلك ، عن طريق الفرز asciibetically على اسم المرتبطة بهذا النظام.

1) وأخيرا نأخذ المفتاح دولار سجل من فرز البيانات هيكل ، ويعود ذلك.

قد يكون جيدا أن كنت لا تحتاج إلى إعداد فئة منفصلة أن تفعل ما تريد.

أنا عادة استخدام @مجموعة أو %التجزئة.

ما هي الميزات التي تبحث عن ليسوا التي تقدمها تلك ؟

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

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

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

أود أن العصا مع مجموعة أو تجزئة.

 @names = ('Paul','Michael','Jessica','Megan');

و

my %petsounds = ("cat" => "meow",
             "dog" => "woof",
             "snake" => "hiss");

المصدر

ذلك يعتمد الكثير ؛ هناك Sparse Matrix وحدات ، بعض أشكال استمرار, ، نمط جديد من OO الخ معظم الناس مجرد رجل perldata, perllol, perldsc للرد على مسألة محددة مع بنية البيانات.

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