कैसे प्राप्त करने के लिए अद्वितीय तत्वों के साथ एक Perl सूची

कार्य । कार्यक्रम में प्रोग्रामिंग भाषा में पर्ल एक सूची है. सूची है तार और संख्या. आप की जरूरत है पाने के लिए अद्वितीय मानों इस सूची से.

समाधान का उपयोग कर समारोह uniq पुस्तकालय से List::Util

सबसे आसान और सबसे सुविधाजनक तरीका है इस समस्या को हल करने के लिए है का उपयोग करें समारोह uniq पुस्तकालय से List::Util. यहाँ है एक उदाहरण कोड:

▶ Run
#!/usr/bin/perl

use List::Util qw(uniq);
use Data::Dumper;

my @arr = uniq('one', 'one', 'b', 'one', 'b', 4);

print Dumper \@arr;

अगर आप को बचाने के लिए इस पाठ के लिए एक फ़ाइल script.pl, और फिर निष्पादित कंसोल में perl script.pl, यह स्क्रीन पर दिखाई देगा:

$VAR1 = [
          'one',
          'b',
          4
        ];

समारोह uniq को बरकरार रखता है आदेश के तत्वों, और यह काम करता है अगर सही ढंग से सूची है undef.

इस कोड से काम करेंगे पर्ल 5.26. के पूर्व संस्करणों में पर्ल शामिल हैं संस्करण पुस्तकालय के List::Util में जो वहाँ रहे हैं कोई समारोह uniq. तो क्रम में करने के लिए का उपयोग करने के लिए इस समाधान आप की जरूरत करने के लिए या तो अद्यतन पर्ल या डाल करने के लिए एक और अधिक हाल के संस्करण पुस्तकालय List::Util.

सरकारी दस्तावेज

यहाँ एक टुकड़ा के उत्पादन perldoc List::Util समारोह के बारे में uniq:

  uniq
        my @subset = uniq @values

    *Since version 1.45.*

    Filters a list of values to remove subsequent duplicates, as judged by a
    DWIM-ish string equality or "undef" test. Preserves the order of unique
    elements, and retains the first value of any duplicate set.

        my $count = uniq @values

    In scalar context, returns the number of elements that would have been
    returned as a list.

    The "undef" value is treated by this function as distinct from the empty
    string, and no warning will be produced. It is left as-is in the
    returned list. Subsequent "undef" values are still considered identical
    to the first, and will be removed.

स्वयं के निर्णय

सिर्फ लिखने के लिए पर्याप्त एक सरलीकृत संस्करण के समारोह uniq पुस्तकालय से List::Util:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

sub uniq {
     my (@values) = @_;

     my %h = map {$_ => 1} @values;

     return keys %h;
}

my @arr = uniq('one', 'one', 'b', 'one', 'b', 4);

print Dumper \@arr;

इस कोड को तुरंत काम करता है के किसी भी संस्करण पर Perl. यहाँ हैं तीन लाइनों से बाद के चरणों uniq:

  • my (@values) = @_; — डाल तर्क पारित कर रहे हैं कि करने के लिए सबवूफर पर एक चर @values
  • my %h = map {$_ => 1} @values; — प्रत्येक तत्व के लिए @values की एक सूची बनाई है, दो तत्वों, मूल तत्व और इकाई है, और सभी जिसके परिणामस्वरूप सूची के साथ एक सूची है और आवंटित की सूची है कि करने के लिए एक हैश. एक हैश है एक unordered सेट की कुंजी-मूल्य. एक कुंजी हो सकता है केवल एक ही मूल्य है । इस वजह से यह संपत्ति के हैश हटा दिया सभी डुप्लिकेट.
  • return keys %h; — लौट सूची में शामिल है केवल कुंजी

लेकिन तुलना समारोह के साथ uniq पुस्तकालय से List::Util इस कोड कमियों है:

  • हमारे समारोह uniq रिटर्न तत्वों मनमाना क्रम में. विभिन्न चलाता है एक ही कोड का नेतृत्व करने के लिए अलग-अलग परिणाम (मान एक समारोह से लौटे uniq में ही किया जाएगा, लेकिन जिस क्रम में वे स्थित हैं, अलग अलग हो जाएगा)
  • हमारे समारोह काम नहीं करता है अगर सही ढंग से सूची है undef. हम सभी के उपयोग से मानों की सूची के रूप में हैश कुंजी. और undef जा नहीं कर सकता में एक कुंजी हैश. जब आप प्रयास का उपयोग करने के लिए undef के रूप में एक महत्वपूर्ण और इस्तेमाल किया जाएगा, एक खाली स्ट्रिंग के बजाय undef.

अन्य लेख