2010-11-24 12 views
5

मेरे पास एक सरणी है जिसमें तत्वों का एक सेट है। तत्वों का क्रम अप्रासंगिक है - मैं एक सरणी का उपयोग करता हूं क्योंकि यह पर्ल में मुझे पता है कि यह सबसे सरल डेटा संरचना है।पर्ल में सरणी तत्वों को हटाने का 'सही' तरीका क्या है?

my @arr = ... 
while (some condition) { 
    # iterate over @arr and remove all elements which meet some criteria 
    # (which depends on $i) 
} 

मैं splice() के बारे में पता है, लेकिन मुझे लगता है कि यह का उपयोग करते समय पुनरावृत्ति अच्छा नहीं है। सरणी तत्वों के लिए delete बहिष्कृत लगता है। शायद grep@arr पर अपने आप में उपयोग करें (@arr = grep {...} @arr)?

यहां सबसे अच्छा अभ्यास क्या है?

शायद एक हैश का उपयोग करें (हालांकि मुझे वास्तव में इसकी आवश्यकता नहीं है)?

+0

के संभावित डुप्लिकेट [क्या पर्ल में एक सरणी से मान को हटाने के लिए सबसे अच्छा तरीका है?] (Http://stackoverflow.com/questions/174292/ क्या-है-सबसे अच्छा तरह से करने के लिए हटाना एक मूल्य-से-एक सरणी में पर्ल) –

उत्तर

7

ग्रेप का उपयोग करने का आपका विचार है अच्छा

@arr = grep { cond($i++); } @arr; 
7

दस्तावेज़ों के मुताबिक, सरणी मानों पर delete पर कॉल करना बहिष्कृत है और पर्ल के भविष्य के संस्करण में हटा दिया जाने की संभावना है।

वैकल्पिक रूप से, आप की जरूरत सूचकांक की सूची बनाने और मूल सरणी टुकड़ा प्रदान कर सकते हैं:

@arr = @arr[ @indices ]; 

आप perldata में स्लाइस के बारे में अधिक पढ़ सकते हैं।

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

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