परिचय: Swift में इंडेक्स खोजना क्यों ज़रूरी है?
\n\nकल्पना करें: आप एक iOS ऐप बना रहे हैं। आपके पास टास्क की एक ऐरे है, और यूज़र किसी विशेष टास्क को उसके नाम से डिलीट करना चाहता है। या हो सकता है, आप किसी एलिमेंट की पोज़ीशन ढूंढ रहे हों ताकि उसे लिस्ट में अपडेट कर सकें। दोनों ही मामलों में, आपको एक ही चीज़ चाहिए — Swift ऐरे में एलिमेंट का इंडेक्स खोजना। यह इतना कॉमन सवाल है कि Stack Overflow पर हज़ारों बार देखा जा चुका है। और यह कोई संयोग नहीं: इंडेक्स खोजना रोज़ की डेवलपमेंट में सबसे ज़्यादा इस्तेमाल होने वाले कामों में से एक है।
\n\nइस ट्यूटोरियल में, हम Swift में एलिमेंट का इंडेक्स खोजने के सभी तरीकों को समझेंगे: सरल firstIndex(of:) से लेकर क्लोज़र के साथ एडवांस सर्च तक। आप सीखेंगे कि स्ट्रिंग, नंबर और कस्टम ऑब्जेक्ट की ऐरे के साथ कैसे काम करें। चलिए शुरू करते हैं!
1. तैयारी: Swift ऐरे में इंडेक्स क्या होता है?
\n\nकोड में कूदने से पहले, बुनियादी बातें याद कर लें। Swift में ऐरे एक क्रमबद्ध कलेक्शन है। हर एलिमेंट का एक इंडेक्स होता है — एक पूर्णांक जो 0 से शुरू होता है। पहला एलिमेंट इंडेक्स 0, दूसरा 1, और इसी तरह।
\n\nlet fruits = ["🍎 सेब", "🍌 केला", "🍒 चेरी"]\n// इंडेक्स: 0 1 2\n\n\nजब हम कहते हैं "एलिमेंट का इंडेक्स खोजें", तो हमारा मतलब है: "मुझे वह पोज़ीशन नंबर बताओ जहाँ यह एलिमेंट मौजूद है।" Swift में इसके लिए कई शानदार तरीके हैं। आइए इन्हें एक-एक करके समझते हैं।
\n\n2. क्लासिक तरीका: firstIndex(of:) — सबसे आसान रास्ता
\n\nSwift 4.2 से, firstIndex(of:) मेथड इंडेक्स खोजने का मानक तरीका बन गया है। यह एक ऑप्शनल Int? वैल्यू लौटाता है — अगर एलिमेंट मिल जाता है, तो इंडेक्स मिलता है; नहीं तो nil।
स्ट्रिंग ऐरे के साथ उदाहरण
\n\nlet fruits = ["सेब", "केला", "चेरी", "खजूर"]\n\nif let index = fruits.firstIndex(of: "चेरी") {\n print("'चेरी' का इंडेक्स: \\(index)") // आउटपुट: 2\n} else {\n print("एलिमेंट नहीं मिला")\n}\n\n\nध्यान दें: firstIndex(of:) पहली बार मिलने वाले एलिमेंट का इंडेक्स लौटाता है। अगर ऐरे में डुप्लीकेट हैं, तो यह सिर्फ पहला इंडेक्स देगा।
नंबर ऐरे के साथ उदाहरण
\n\nlet numbers = [10, 20, 30, 40, 50]\n\nif let position = numbers.firstIndex(of: 30) {\n print("संख्या 30 पोज़ीशन \\(position) पर है") // 2\n}\n\n\nज़रूरी: यह मेथड सिर्फ उन टाइप्स के साथ काम करता है जो Equatable प्रोटोकॉल को फॉलो करते हैं। सभी स्टैंडर्ड टाइप्स (Int, String, Double, Bool) पहले से ही इसका पालन करते हैं।
3. कंडीशन के साथ सर्च: firstIndex(where:) — असीम लचीलापन
\n\nलेकिन क्या होगा अगर आपको सटीक वैल्यू के बजाय किसी शर्त के आधार पर इंडेक्स खोजना हो? जैसे, पहला एलिमेंट जो 25 से बड़ा हो, या कोई स्ट्रिंग जो किसी खास अक्षर से शुरू होती हो। इसके लिए firstIndex(where:) मेथड है (पहले इसे index(where:) कहा जाता था)।
क्लोज़र के साथ सिंटैक्स
\n\nlet scores = [15, 22, 37, 41, 19]\n\nif let index = scores.firstIndex(where: { $0 > 25 }) {\n print("25 से बड़ा पहला एलिमेंट इंडेक्स \\(index) पर है") // 2 (वैल्यू 37)\n}\n\n\nऑब्जेक्ट के प्रॉपर्टी के आधार पर सर्च
\n\nमान लीजिए, आपके पास कस्टम स्ट्रक्चर की ऐरे है:
\n\nstruct User {\n let name: String\n let age: Int\n}\n\nlet users = [\n User(name: "अन्ना", age: 25),\n User(name: "बोरिस", age: 30),\n User(name: "विक्टर", age: 22)\n]\n\n// "बोरिस" नाम वाले यूज़र का इंडेक्स खोजें\nif let index = users.firstIndex(where: { $0.name == "बोरिस" }) {\n print("बोरिस इंडेक्स \\(index) पर है") // 1\n}\n\n\nयह तरीका बेहद शक्तिशाली है। आप कोई भी लॉजिकल कंडीशन इस्तेमाल कर सकते हैं: कई प्रॉपर्टीज़ चेक करना, रेगुलर एक्सप्रेशन, या क्लोज़र के अंदर फंक्शन कॉल करना।
\n\n4. डुप्लीकेट के साथ काम: सभी इंडेक्स कैसे खोजें
\n\nम