2017-07-07 7 views
6

List.classify विधि कुछ मैपिंग द्वारा एक सूची को हैश में बदल सकता है जिसे मैं परिभाषित करता हूं। ,क्या मैं मूल्यों को संशोधित कर सकता हूं क्योंकि मैं एक पर्ल 6 सूची वर्गीकृत करता हूं?

{ 
Amelia => [(Amelia 1) (Amelia 2) (Amelia 3)], 
Camelia => [(Camelia 5) (Camelia 6) (Camelia 7)] 
} 

लेकिन मैं वास्तव में चाहते हैं चाहते हैं: कि मानचित्रण का परिणाम हैश कुंजी और मूल मूल्य

my @list = (
    <Camelia 5>, 
    <Camelia 6>, 
    <Camelia 7>, 
    <Amelia 1>, 
    <Amelia 2>, 
    <Amelia 3> 
    ); 

my %hash = @list.classify: *.[0]; 

say %hash; 

हैश मान सूचियों की सूची क्योंकि मूल thinygs यह वर्गीकृत सूचियों थे हो रहा है इस:

{ 
Amelia => (1 2 3), 
Camelia => (5 6 7) 
} 

मैं कुछ अतिरिक्त काम कर सकता है, लेकिन यह थोड़ा बहुत ज्यादा काम लगता है:

my @list = (
    <Camelia 5>, 
    <Camelia 6>, 
    <Camelia 7>, 
    <Amelia 1>, 
    <Amelia 2>, 
    <Amelia 3> 
    ); 

my %hash = @list 
    .classify(*.[0]) 
    .kv 
    .map({ 
     $^a => $^b.map: *.[*-1] 
     }) 
    ; 

say %hash; 

उत्तर

9

आप :as क्रिया विशेषण का उपयोग कर सकते हैं:

my @list = (
    <Camelia 5>, 
    <Camelia 6>, 
    <Camelia 7>, 
    <Amelia 1>, 
    <Amelia 2>, 
    <Amelia 3> 
    ); 

my %hash = @list.classify: *.[0], as => *.[1]; 

say %hash; # {Amelia => [1 2 3], Camelia => [5 6 7]} 

(दुर्भाग्य से, यह अभी तक documented होने के लिए प्रतीत नहीं होता।)

+0

मुझे पता था कि कुछ होना था! –

+1

जनवरी से दस्तावेज़ समस्या https://github.com/perl6/doc/issues/1162 –

3

एक और गैर-दस्तावेजी क्रिया विशेषण :into है, जो मुझे लगता है कि ज्यादातर है नहीं है में में एडाप्टर होने के लिए (हालांकि विधि नाम में "सूची" के साथ कुछ List में होना चाहिए):

my @list = (
    <Camelia 5>, 
    <Camelia 6>, 
    <Camelia 7>, 
    <Amelia 1>, 
    <Amelia 2>, 
    <Amelia 3> 
    ); 

@list.classify: *.[0], :into(my %hash), :as(*.[1]); 

say %hash; 

इसका यह रूप अधिक समझ में आता है, लेकिन यह तब भी होता है जब आप :into adverb का उपयोग नहीं करते हैं। मुझे लगता है कि वहां दो हैंश हैं:

my %hash = Hash.new.classify-list: *.[0], @list, :as(*.[1]); 
संबंधित मुद्दे