वहाँ प्रश्न की व्याख्या के दो तरीके हैं।
- सरणी की लंबाई को कैसे कम करें?
- कैसे सरणी द्वारा खपत स्मृति की मात्रा कम करने के लिए?
जवाब में से अधिकांश अब तक पूर्व पर ध्यान केंद्रित। मेरे विचार में, इसका सबसे अच्छा जवाब splice फ़ंक्शन है। ,
splice @array, -10;
हालांकि क्योंकि कैसे पर्ल सरणियों के लिए स्मृति का प्रबंधन, एक ही रास्ता सुनिश्चित करना है कि एक सरणी कम स्मृति लेता है एक नई सरणी में कॉपी करना है (और: उदाहरण के लिए, अंत से 10 तत्वों को दूर करने के पुरानी सरणी की स्मृति को पुनः दावा किया जाना चाहिए)। इसके लिए, मैं स्लाइस ऑपरेशन का उपयोग करने के बारे में सोचने के लिए सोचूंगा।
original: length 500 => size 2104
pound: length 490 => size 2208
splice: length 490 => size 2104
delete: length 490 => size 2104
slice: length 490 => size 2064
आप देख सकते हैं कि केवल टुकड़ा आपरेशन (एक में कॉपी किया:
@new = @old[ 0 .. $#old - 10 ]
यहाँ (2104 बाइट्स का प्रयोग करके) एक 500 तत्व सरणी के लिए अलग-अलग दृष्टिकोण की तुलना की गई: उदाहरण के लिए, 10 तत्वों को दूर करने के नई सरणी) मूल की तुलना में एक छोटा आकार है।
यहाँ कोड मैं इस विश्लेषण के लिए इस्तेमाल किया है:
use strict;
use warnings;
use 5.010;
use Devel::Size qw/size/;
my @original = (1 .. 500);
show('original', \@original);
my @pound = @original;
$#pound = $#pound - 10;
show('pound', \@pound);
my @splice = @original;
splice(@splice,-10);
show('splice', \@splice);
my @delete = @original;
delete @delete[ -10 .. -1 ];
show('delete', \@delete);
my @slice = @original[0 .. $#original - 10];
show('slice', \@slice);
sub show {
my ($name, $ref) = @_;
printf("%10s: length %4d => size %d\n", $name, scalar @$ref, size($ref));
}
$ # हटाई गई है, लेकिन $ # $ # सरणी के रूप में ही नहीं है। मैंने कहीं भी नहीं पढ़ा है कि $ # सरणी को बहिष्कृत किया गया है, हालांकि यह भ्रमित है और मैं इसे इस्तेमाल करने के खिलाफ एक की सिफारिश करता हूं। –