2014-10-01 21 views
8

Simple câu hỏi - hy vọng, tôi đang cố gắng để tạo ra một mảng đơn giản của nhân vật, một cái gì đó trong tĩnh mạch của:Swift: tạo ra một mảng ký tự (Swift)

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

và đã thử những điều sau đây không có kết quả

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

Tôi nhận thấy Swift sử dụng Unicode, cách chính xác để làm điều gì đó như thế này là gì?

(Lưu ý, đây không phải là câu hỏi về sự tương tác với thẻ Obj-C cũ, đúng trong Swift để thử nghiệm v.v.).

Trả lời

12

Đó là một chút rườm rà để lấy mã nhân vật ban đầu (tức là 'a' trong c/obj-C) trong Swift, nhưng bạn có thể làm điều đó như thế này:

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

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

Cảm ơn, đã cố gắng tìm bản đồ đó trong tài liệu; không thể. PS. muốn thử câu hỏi tiền thưởng liên quan đến tiếp tuyến? http://stackoverflow.com/questions/26152604/swift-slice-startindex-always-0 ;-) –

+0

Vâng, nó không được ghi chép đầy đủ; về cơ bản bạn phải đào sâu qua tệp tiêu đề được tạo tự động và xem những gì bạn có thể thực hiện công việc;) –

2

Nếu bạn chỉ muốn một mảng của một tập nổi tiếng:

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

Phải, tôi nhận ra tôi có thể gõ nó ra, nhưng đã tự hỏi làm thế nào bạn sẽ lập bản đồ ký tự như bạn làm trong C/obj- C vv Cảm ơn –

+0

xin lỗi, tôi chỉ biết Swift. –

11

Cảm ơn câu trả lời hữu ích.

Tôi đang sử dụng phiên bản một lớp lót.

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

hoặc

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

Tôi thích một lớp lót; tuy nhiên tôi thấy rằng tôi cần phải tháo đầu ra của UnicodeScalar() như sau: let xs = (0 .. <26) .map ({Ký tự (UnicodeScalar ("a" .unicodeScalars.first! .value + $ 0)!) }) –

-1

Bạn có thể chỉ cần sử dụng let alphabets: [UnicodeScalar] = Array("A"..."Z")

+0

Điều này không hoạt động. Nó cho thấy một lỗi trong sân chơi của tôi – adev

+0

Bạn có thể sử dụng phạm vi '" A "..." Z "' để tạo phạm vi từ 'A' đến' Z', nhưng 'Array()' sẽ không trả về mảng của các chữ cái đó – Grubas

Các vấn đề liên quan