एक स्लाइस से तत्वों को पुनरावृत्त रूप से हटाएं
एक स्लाइस पर पुनरावृत्ति करते समय, लूप के भीतर एक तत्व को हटाना शिफ्टिंग के कारण मुश्किल हो सकता है बाद के तत्व. किसी तत्व को हटाने के लिए एपेंड का उपयोग करना एक आम गलत तरीका है, जैसा कि नीचे दिए गए उदाहरण में देखा गया है:
a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
for i := range a { // BAD
if conditionMeets(a[i]) {
a = append(a[:i], a[i 1:]...)
}
}
यह विधि सही ढंग से काम नहीं करती है क्योंकि लूप स्थानांतरित तत्वों के लिए जिम्मेदार नहीं है। पुनरावृत्ति करते समय तत्वों को ठीक से हटाने के लिए, आप या तो एक डाउनवर्ड लूप का उपयोग कर सकते हैं या एक वैकल्पिक विधि नियोजित कर सकते हैं जो निरंतर प्रतिलिपि संचालन से बचाती है।
डाउनवर्ड लूप
एक डाउनवर्ड लूप पुनरावृत्त होता है अंतिम तत्व से शुरू करते हुए, उलटा क्रम। यह दृष्टिकोण आपको लूप वेरिएबल्स को मैन्युअल रूप से कम किए बिना तत्वों को हटाने की अनुमति देता है:
a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
for i := len(a) - 1; i >= 0; i-- {
if conditionMeets(a[i]) {
a = append(a[:i], a[i 1:]...)
}
}
कई निष्कासन के लिए वैकल्पिक विधि
यदि आपको बड़ी संख्या में तत्वों को हटाने की आवश्यकता है, तो अत्यधिक प्रतिलिपि के कारण एपेंड का उपयोग करना अक्षम हो सकता है। एक वैकल्पिक दृष्टिकोण एक नया स्लाइस बनाना और केवल गैर-हटाने योग्य तत्वों की प्रतिलिपि बनाना है:
a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
b := make([]string, len(a))
copied := 0
for _, s := range(a) {
if !conditionMeets(s) {
b[copied] = s
copied
}
}
b = b[:copied]
कई निष्कासनों के लिए इन-प्लेस निष्कासन (सामान्य प्रयोजन)
इन-प्लेस निष्कासन तकनीक में दो सूचकांकों को बनाए रखना और गैर-असाइन करना शामिल है हटाए गए तत्व स्थानों को शून्य करते समय एक ही स्लाइस में हटाने योग्य तत्व:
a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
copied := 0
for i := 0; i
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3