2014-10-01 20 views
8

सरल सवाल की एक सरणी उत्पन्न - उम्मीद है कि, मैं पात्रों में से एक सरल सरणी उत्पन्न करने के लिए कोशिश कर रहा हूँ, की नस में कुछ:स्विफ्ट: (स्विफ्ट) वर्ण

// trying to do something like this (pseudo code): 
let letters:[Character] = map(0..<26) { i in 'a' + i } 

और कोशिश की है कोई लाभ नहीं हुआ निम्नलिखित

let a = Character("a") 
let z = Character("z") 
let r:Range<Character> = a..<z 
let letters:[Character] = map(a..<z) { i in i } 

मुझे एहसास है कि स्विफ्ट यूनिकोड का उपयोग करता है, ऐसा कुछ करने का सही तरीका क्या है?

(ध्यान दें, यह लीगेसी ओब्जे-सी चार के साथ इंटरऑप के बारे में कोई प्रश्न नहीं है, सख्ती से परीक्षण के लिए स्विफ्ट में)।

उत्तर

12

यह प्रारंभिक चरित्र कोड स्विफ्ट में (यानी सी/Obj सी में 'a') प्राप्त करने के लिए एक छोटे से बोझिल है, लेकिन आप यह कर सकते हैं इस तरह:

let aScalars = "a".unicodeScalars 
let aCode = aScalars[aScalars.startIndex].value 

let letters: [Character] = (0..<26).map { 
    i in Character(UnicodeScalar(aCode + i)) 
} 
+0

धन्यवाद, दस्तावेज़ों में उस मानचित्रण को खोजने का प्रयास कर रहा था; नहीं कर सके। पुनश्च। टेंगेंशियल से संबंधित बोनस प्रश्न के लिए प्रयास करना चाहते हैं? http://stackoverflow.com/questions/26152604/swift-slice-startindex-always-0 ;-) –

+0

हाँ, यह अच्छी तरह से प्रलेखित नहीं है; आपको मूल रूप से स्वत: जेनरेट की गई हेडर फ़ाइल के माध्यम से खोदना होगा और देखें कि आप क्या काम कर सकते हैं;) –

2

तुम सिर्फ एक नाम से जाना जाता सेट की एक सरणी चाहते हैं:

let str = "abcdefghijklmnopqrstuvwxyz" 
let characterArray = Array(str) 
println(characterArray) 

//[a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z] 
+0

सही उपयोग कर सकते हैं, मुझे लगता है मैं इसे बाहर टाइप कर सकते हैं एहसास है, लेकिन सोच रहा था आप कैसे के रूप में आप सी/Obj- में होगा पात्रों के नक्शे होगा सी आदि धन्यवाद –

+0

ठीक है क्षमा करें, मुझे केवल स्विफ्ट पता है। –

11

उपयोगी उत्तरों के लिए धन्यवाद।

मैं एक-लाइनर संस्करण का उपयोग कर रहा हूं।

let xs = (97...122).map({Character(UnicodeScalar($0))}) 

या

let xs = (0..<26).map({Character(UnicodeScalar("a".unicodeScalars.first!.value + $0))}) 
+0

मुझे एक-लाइनर पसंद है; हालांकि मुझे पता चला कि मुझे यूनिकोडस्कालर() के आउटपुट को अनदेखा करने की आवश्यकता है: xs = (0 .. <26) .map ({कैरेक्टर (यूनिकोडस्कालर ("ए"। यूनिकोडस्कालर्स। फर्स्ट! .value + $ 0)!) }) –

-1

आप बस let alphabets: [UnicodeScalar] = Array("A"..."Z")

+0

यह काम नहीं करता है। यह मेरे खेल के मैदान में एक त्रुटि दिखाता है – adev

+0

आप 'ए' से 'ज़ेड' तक सीमा बनाने के लिए '' ए "..." Z "' का उपयोग कर सकते हैं, लेकिन 'ऐरे()' उन अक्षरों की सरणी वापस नहीं करेगा – Grubas