Swift में String को Int में बदलना: सरल से उच्च प्रदर्शन तक
\n\nहर iOS डेवलपर को देर-सबेर एक सरल, पहली नज़र में, कार्य का सामना करना पड़ता है: स्ट्रिंग को संख्या में बदलना। लगता है इससे आसान क्या हो सकता है — Int("42") और हो गया। लेकिन जब ऐप हजारों स्ट्रिंग्स को प्रोसेस करता है, JSON-लॉग पार्स करता है या उपयोगकर्ता इनपुट पढ़ता है, तो इस ऑपरेशन का प्रदर्शन महत्वपूर्ण हो जाता है।
इस लेख में हम केवल यह नहीं दिखाएंगे कि Swift में String को Int में कैसे बदलें, बल्कि एक वास्तविक जांच भी करेंगे: कौन सा तरीका तेज़ है, सरल कोड के पीछे कौन से खतरे छिपे हैं, और Swift में ऑप्टिमाइज़्ड कोड कैसे लिखें जो production में विफल न हो।
\n\nयह सामग्री Stack Overflow (हजारों व्यूज) के एक लोकप्रिय प्रश्न पर आधारित है और शैक्षिक पोर्टल PythonLib के लिए अनुकूलित की गई है। चलिए शुरू करते हैं!
\n\n1. मूल विधि: Int(string)
\n\nसबसे स्पष्ट और Apple द्वारा अनुशंसित तरीका है इनिशियलाइज़र Int(String) का उपयोग करना। यह एक वैकल्पिक मान Int? लौटाता है, जो सुरक्षित है: यदि स्ट्रिंग कोई संख्या नहीं है, तो आपको nil मिलेगा।
let stringNumber = "123"\nif let number = Int(stringNumber) {\n print("संख्या: \\(number)")\n} else {\n print("रूपांतरण विफल")\n}\n\nलाभ:
\n- \n
- कोड की पठनीयता — सभी विकल्पों में सर्वश्रेष्ठ। \n
- सुरक्षा — ऑप्शनल क्रैश से बचाता है। \n
- विभिन्न संख्या प्रणालियों का समर्थन:
Int("FF", radix: 16)। \n
नुकसान:
\n- \n
- प्रदर्शन — बड़े पैमाने के संचालन में यह अड़चन बन सकता है। \n
- स्पेस, मुद्रा चिह्न, स्थानीयकृत संख्याओं को संभालता नहीं है। \n
यह विधि 90% मामलों के लिए आदर्श है। लेकिन यदि आप लॉग पार्सर लिख रहे हैं या दस लाख पंक्तियों वाली CSV फ़ाइलों को प्रोसेस कर रहे हैं — तो आगे पढ़ें।
\n\n2. NumberFormatter का उपयोग: "गंदी" स्ट्रिंग्स के लिए
\n\nवास्तविक दुनिया आदर्श नहीं है। उपयोगकर्ता " 42 ", "$100" या "1 234.56" दर्ज कर सकता है। यहाँ NumberFormatter मदद करता है — एक शक्तिशाली लेकिन धीमा उपकरण।
let formatter = NumberFormatter()\nformatter.numberStyle = .decimal\n\nif let number = formatter.number(from: " 1 234 ")?.intValue {\n print(number) // 1234\n}\n\nकब उपयोग करें:
\n- \n
- स्थानीयकृत संख्याओं का पार्सिंग (यूरोपीय प्रारूप "1.234,56")। \n
- स्पेस, मुद्राओं, प्रतिशत वाली स्ट्रिंग्स। \n
- UI इनपुट फ़ील्ड, जहाँ उपयोगकर्ता कुछ भी दर्ज कर सकता है। \n
हालांकि याद रखें: NumberFormatter एक भारी उपकरण है। इसे बनाना महंगा है, इसलिए हमेशा इंस्टेंस को स्टैटिक वेरिएबल के रूप में कैश करें, न कि प्रत्येक स्ट्रिंग के लिए नया बनाएं।
3. Scanner (NSScanner) — पुराना, लेकिन तेज़
\n\nObjective-C का क्लासिक दृष्टिकोण — Scanner। यह NumberFormatter से तेज़ काम करता है, लेकिन सावधानी की आवश्यकता है।
let scanner = Scanner(string: "123abc")\nvar intValue: Int = 0\nif scanner.scanInt(&intValue) {\n print("मिला: \\(intValue)") // 123\n}\n\nScanner स्ट्रिंग को बाएं से दाएं स्कैन करता है और पहले गैर-संख्यात्मक वर्ण पर रुक जाता है। यह सुविधाजनक है यदि आपको कचरे वाली स्ट्रिंग से संख्या "निकालनी" है।
\n\nबेंचमार्क संकेत: Scanner, NumberFormatter से 3-5 गुना तेज़ है, लेकिन सरल Int() से 2-3 गुना धीमा है। मिश्रित डेटा के पार्सिंग के लिए आदर्श।
4. कस्टम फ़ंक्शन: अधिकतम गति के लिए मैन्युअल पार्सिंग
\n\nयदि आप PythonLib पर यह लेख पढ़ रहे हैं, तो आप शायद जानते हैं: जब गति की आवश्यकता हो — हाथ से लिखें। शुद्ध डिजिटल स्ट्रिंग्स (केवल 0-9 वर्ण, संभवतः माइनस) के लिए, आप अपना पार्सर लिख सकते हैं।
\n\nfunc fastInt(from string: String) -> Int? {\n var result = 0\n var isNegative = false\n var started