2010-03-03 12 views
5

मैं निम्नलिखित हैश के एश से तत्व कैसे हटा सकता हूं;पर्ले में ऐरे का हैश: ट्रैवर्सल और डिलीशन

%HoA = (
    flintstones => [ {day=>'19'}, {day=>'21'}, {day=>'22'} ], 
    jetsons  => [ {day=>'29'}, {day=>'23'}, {day=>'25'} ], 
    simpsons  => [ {day=>'26'}, {day=>'33'}, {day=>'27'} ] 
); 
मैं कैसे flintstones से उदाहरण के {day=>'21'} हटा सकते हैं और परिणाम की तरह लग रहे बना सकते हैं जैसा

;

%HoA = (
    flintstones => [ {day=>'19'}, {day=>'22'} ], 
    jetsons  => [ {day=>'29'}, {day=>'23'}, {day=>'25'} ], 
    simpsons  => [ {day=>'26'}, {day=>'33'}, {day=>'27'} ] 
); 

मैंने हैश =() का उपयोग करने का प्रयास किया है; लेकिन उस तत्व है कि मैं सरणियों में से प्रत्येक पर keys %HoA से अधिक

उत्तर

2

दोहराएं हटाते हैं, तो grep लागू के स्थान पर undef, में जो परिणाम $HoA{$key} में वापस परिणामों के लिए दुकान संदर्भ (आप उन्हें @{$HoA{$key}} साथ unreference करना होगा),।

0

हैश से विशिष्ट तत्व को हटाने के लिए हटाएं फ़ंक्शन का उपयोग करें।

$ होआ {flintstones} -> [1] हटाएं;

+0

यह "कोई ऐरे संदर्भ नहीं देता" – bilal

10

आप जानते हैं कि आप फ्लिंटस्टोंस सरणी से [1] तत्व निकालना चाहते हैं, तो आप splice सीधे उपयोग कर सकते हैं:

splice @{$HoA{flintstones}}, 1, 1; 

आप बस पता है कि तुम तत्वों = दिन होने 21 को निकालना चाहते हैं, grep का उपयोग या तो इस तरह से:

$HoA{flintstones} = [ grep { $_->{day} != 21 } @{$HoA{flintstones}} ]; 

या यह बेहतर तरीके से, के रूप में शॉन के जवाब ने सुझाव दिया:

@{$HoA{flintstones}} = grep { $_->{day} != 21 } @{$HoA{flintstones}}; 
4

यह सिर्फ एक ताजा arrayref (यदि हो तो) सभी %HoA में सरणी का उल्लेख करने के लिए जारी रहेगा $HoA{flintstones} है कि मौजूदा संदर्भ $HoA{flintstones} को बताए से अधिक लाभ दिया है।

या, अधिक readably:

my $flintstones = $HoA{flintstones}; 
@$flintstones = grep { $$_{day} != 21 } @$flintstones; 
0

$ हटाना {$ {$ होआ {फ्लिंटस्टोंस}} [1]} {दिन};

संबंधित मुद्दे