स्विफ्ट डिक्शनरी में कुंजी कैसे जांचें और मान प्राप्त करें: 5 तरीके

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

स्विफ्ट डिक्शनरी में कुंजी है या नहीं, यह कैसे जांचें और मान प्राप्त करें: शुरुआती और पेशेवरों के लिए पूर्ण गाइड

\n\n

डिक्शनरी के साथ काम करना हर iOS डेवलपर की रोजमर्रा की जरूरत है। लेकिन जैसे ही हम सरल "मान डालने" से "क्या ऐसी कोई कुंजी मौजूद है?" पर आते हैं — तब मुश्किलें शुरू होती हैं। इस प्रश्न ने Stack Overflow पर हजारों व्यूज प्राप्त किए हैं, और यह सही भी है: सरल दिखने वाले इस कार्य में कई छिपी हुई चुनौतियाँ हैं।

\n\n

इस लेख में हम केवल "Determining if Swift dictionary contains key and obtaining any of its values" प्रश्न का उत्तर नहीं देंगे, बल्कि 5 अलग-अलग दृष्टिकोणों को विस्तार से समझाएंगे। आप जानेंगे कि कौन सा तरीका तेज़ है, कौन सा अधिक सुरक्षित है, और कौन सा बस सुरुचिपूर्ण कोड है जिसे लिखना और पढ़ना सुखद है।

\n\n

संक्षिप्त परिचय: Swift में Dictionary क्या है?

\n\n

उन लोगों के लिए जो Swift से नए हैं: Dictionary — यह "कुंजी-मान" जोड़ियों का एक संग्रह है। कुंजियाँ अद्वितीय होती हैं, मान दोहराए जा सकते हैं। यह इस तरह दिखता है:

\n\n
var userScores: [String: Int] = [\n    "Alice": 95,\n    "Bob": 87,\n    "Charlie": 92\n]
\n\n

अब कल्पना करें: आप "David" नाम के खिलाड़ी का स्कोर प्राप्त करना चाहते हैं। लेकिन David डिक्शनरी में नहीं है। यदि आप केवल userScores["David"] लिखते हैं, तो Swift क्रैश नहीं होगा, बल्कि nil लौटाएगा। और यहीं से सबसे दिलचस्प शुरू होता है।

\n\n

तरीका नंबर 1: क्लासिक if let — बुनियादी ज्ञान जो हर किसी को पता होना चाहिए

\n\n

सबसे सरल और पढ़ने योग्य तरीका है if let के माध्यम से ऑप्शनल बाइंडिंग (optional binding) का उपयोग करना। आप एक साथ जांचते हैं कि कुंजी मौजूद है या नहीं, और मान प्राप्त करते हैं:

\n\n
let scores: [String: Int] = ["Alice": 95, "Bob": 87]\n\nif let aliceScore = scores["Alice"] {\n    print("एलिस का स्कोर: \\(aliceScore)")\n} else {\n    print("खिलाड़ी नहीं मिला")\n}
\n\n

लाभ:

\n
    \n
  • अत्यधिक पढ़ने योग्य कोड
  • \n
  • ऑप्शनल के साथ सुरक्षित कार्य
  • \n
  • अतिरिक्त विधियों को कॉल करने की आवश्यकता नहीं
  • \n
\n\n

नुकसान:

\n
    \n
  • यदि केवल कुंजी की उपस्थिति की जांच करनी है बिना मान प्राप्त किए — तो यह अतिरिक्त है
  • \n
\n\n

यह दृष्टिकोण 90% मामलों के लिए स्वर्ण मानक है। Apple के आधिकारिक दस्तावेज़ में इसी की सिफारिश की गई है।

\n\n

तरीका नंबर 2: Guard let — फ़ंक्शन से जल्दी बाहर निकलने के लिए

\n\n

यदि आप एक फ़ंक्शन लिख रहे हैं जहाँ कुंजी की अनुपस्थिति तुरंत बाहर निकलने का कारण है, तो guard let का उपयोग करें। यह कोड को सपाट बनाता है और नेस्टेड if-ओं के "मृत्यु पिरामिड" से बचाता है:

\n\n
func printScore(for player: String, in scores: [String: Int]) {\n    guard let score = scores[player] else {\n        print("खिलाड़ी \\(player) नहीं मिला")\n        return\n    }\n    // यहाँ हमें विश्वास है कि score मौजूद है\n    print("खिलाड़ी \\(player) का स्कोर: \\(score)")\n}\n\nprintScore(for: "Bob", in: ["Alice": 95, "Bob": 87]) // खिलाड़ी Bob का स्कोर: 87\nprintScore(for: "David", in: ["Alice": 95, "Bob": 87]) // खिलाड़ी David नहीं मिला
\n\n

लाभ:

\n
    \n
  • "त्रुटि पथ" और "मुख्य परिदृश्य" का स्पष्ट विभाजन
  • \n
  • guard के बाद वेरिएबल पूरे दायरे में उपलब्ध होता है
  • \n
\n\n

नुकसान:

\n
    \n
  • यदि केवल उपस्थिति जांचनी है बिना फ़ंक्शन से बाहर निकले — तो उपयुक्त नहीं
  • \n
\n\n

तरीका नंबर 3: contains(where:) के माध्यम से जांच — जब कुंजी जटिल हो सकती है

\n\n

कभी-कभी आपको केवल कुंजी खोजने की नहीं, बल्कि किसी शर्त के अनुसार उसकी जांच करने की आवश्यकता होती है। उदाहरण के लिए, कुंजी एक स्ट्रिंग है, और आप आंशिक मिलान ढूंढ रहे हैं। यहाँ contains(where:) विधि मदद करती है:

\n\n
let config: [String: Any] = [\n    "app_version": "2.1.0",\n    "build_number": 42,\n    "is_debug_mode": true\n]\n\n// ऐसी कुंजी खोजें जो "app_" से शुरू होती है\nlet hasAppKey = config.keys.contains { $0.hasPrefix("app_") }\nprint("क्या app_ कुंजी है: \\(hasAppKey)") // true\n\n// पहली मिली कुंजी से मान प्राप्त करें\nif let appKey = confi                

ब्लॉग

पुस्तक अनुशंसाएँ