🔍 स्विफ्ट ऐरे में तत्व की उपस्थिति की जाँच क्यों करें? और 2025 में इसे सही तरीके से कैसे करें?
\n\nकल्पना करें: आप पिज़्ज़ा ऑर्डर करने के लिए एक ऐप लिख रहे हैं। उपयोगकर्ता ने "पेपरोनी", "हवाईयन" और "मार्गेरिटा" चुना है। आपके कोड को यह सुनिश्चित करना होगा कि "पेपरोनी" पहले से कार्ट में है, ताकि डुप्लिकेट न जुड़े। या आप ग्राहक डेटाबेस के साथ काम कर रहे हैं और जाँच रहे हैं कि ईमेल सिस्टम में पंजीकृत है या नहीं। ऐरे में तत्व की उपस्थिति की जाँच स्विफ्ट डेवलपमेंट में सबसे सामान्य ऑपरेशनों में से एक है।
\n\nयह सरल लगता है, है ना? लेकिन 2025 में, जब स्विफ्ट तेज़ी से विकसित हो रहा है और मोबाइल ऐप का प्रदर्शन महत्वपूर्ण है, गलत विधि चुनने से आपको UI में लैग या डिबगिंग के अतिरिक्त घंटे लग सकते हैं। इस लेख में, हम स्विफ्ट ऐरे में तत्व की जाँच के सभी तरीकों का विश्लेषण करेंगे: सरल contains() से लेकर उन्नत क्लोजर और कस्टम प्रकारों के साथ काम करने तक। आप जानेंगे कि अपने कार्य के लिए कौन सी विधि चुनें और क्यों।
वैसे, यह प्रश्न Stack Overflow पर सबसे लोकप्रिय में से एक है (200,000 से अधिक बार देखा गया)। और हम इसका एक संपूर्ण, आधुनिक उत्तर देंगे। चलिए शुरू करते हैं! 🚀
\n\n📦 स्विफ्ट में ऐरे: मूल अवलोकन (उन लोगों के लिए जो जल्दी में हैं)
\n\nऐरे (Array) एक ही प्रकार के तत्वों का एक क्रमबद्ध संग्रह है। स्विफ्ट में ऐरे टाइप-सेफ हैं, यानी आप गलती से संख्याओं के ऐरे में एक स्ट्रिंग नहीं जोड़ सकते। यह एक फायदा (कम बग) और एक चुनौती (प्रकारों को सख्ती से निर्दिष्ट करना) दोनों है।
let pizzaMenu: [String] = ["मार्गेरिटा", "पेपरोनी", "हवाईयन", "चार पनीर"]\nlet numbers: [Int] = [1, 2, 3, 4, 5]\n\n\nअब मुख्य बात पर आते हैं — कैसे जाँचें कि ऐरे में कोई तत्व है या नहीं?
\n\n🛠️ स्विफ्ट ऐरे में तत्व की उपस्थिति की जाँच के शीर्ष 5 तरीके
\n\n1. contains() — सरलता का राजा (Equatable)
\n\nसबसे स्पष्ट और अक्सर उपयोग किया जाने वाला तरीका। contains(_:) विधि true लौटाती है यदि तत्व मिल जाता है। यह केवल Equatable प्रोटोकॉल का पालन करने वाले प्रकारों के साथ काम करता है (और ये सभी बुनियादी प्रकार हैं: String, Int, Double आदि)।
let pizzas = ["मार्गेरिटा", "पेपरोनी", "हवाईयन"]\nif pizzas.contains("पेपरोनी") {\n print("यह पिज़्ज़ा मौजूद है!") // ✅ यह प्रिंट होगा\n} else {\n print("पिज़्ज़ा नहीं मिला")\n}\n\n\nलाभ: पढ़ने में आसान, संक्षिप्त, तेज़।
\nनुकसान: यदि आपके पास Equatable के बिना एक जटिल ऑब्जेक्ट (स्ट्रक्चर/क्लास) है तो काम नहीं करता।
2. contains(where:) — जटिल जाँच के लिए
\n\nयदि आपको सटीक मिलान नहीं, बल्कि एक शर्त की जाँच करनी है (उदाहरण के लिए, "क्या 500 रुपये से अधिक महंगा पिज़्ज़ा है?"), तो contains(where:) का उपयोग करें। यह एक क्लोजर लेता है जो Bool लौटाता है।
struct Pizza {\n let name: String\n let price: Int\n}\n\nlet order: [Pizza] = [\n Pizza(name: "मार्गेरिटा", price: 450),\n Pizza(name: "पेपरोनी", price: 550),\n Pizza(name: "हवाईयन", price: 500)\n]\n\nlet hasExpensivePizza = order.contains { $0.price > 500 }\nprint("क्या महंगा पिज़्ज़ा है? \\(hasExpensivePizza)") // true\n\n\nलाभ: लचीलापन, किसी भी प्रकार के साथ काम करता है।
\nनुकसान: contains() से थोड़ा धीमा (लेकिन 99% मामलों में अंतर नगण्य है)।
3. firstIndex(of:) — जब इंडेक्स महत्वपूर्ण हो
\n\nकभी-कभी केवल यह जानना ही नहीं, बल्कि तत्व की स्थिति प्राप्त करना भी आवश्यक होता है। उदाहरण के लिए, इसे हटाने या बदलने के लिए। firstIndex(of:) विधि एक वैकल्पिक Int? लौटाती है।
let pizzas = ["मार्गेरिटा", "पेपरोनी", "हवाईयन"]\nif let index = pizzas.firstIndex(of: "पेपरोनी") {\n print("पेपरोनी स्थिति \\(index) पर है") // 1\n} else {\n print("नहीं मिला")\n}\n\n\nमहत्वपूर्ण: firstIndex को भी Equatable की आवश्यकता होती है। यदि आपका प्रकार इसका पालन नहीं करता है, तो