2015-01-29 28 views

Trả lời

10

Trong khi chỉ số chuỗi không truy cập ngẫu nhiên và không phải là số, bạn có thể tiến chúng bằng một số để truy cập vào các nhân vật thứ n:

var s = "Hello, I must be going" 

s.removeAtIndex(advance(s.startIndex, 5)) 

println(s) // prints "Hello I must be going" 

Tất nhiên, bạn nên luôn luôn kiểm tra chuỗi có độ dài ít nhất là 5 trước khi thực hiện việc này!

chỉnh sửa: như @MartinR chỉ ra, bạn có thể sử dụng phiên bản với cấp-index tạm ứng để tránh nguy cơ chạy qua cuối cùng:

let index = advance(s.startIndex, 5, s.endIndex) 
if index != s.endIndex { s.removeAtIndex(index) } 

Như bao giờ hết, optionals là bạn của bạn:

// find returns index of first match, 
// as an optional with nil for no match 
if let idx = s.characters.index(of:",") { 
    // this will only be executed if non-nil, 
    // idx will be the unwrapped result of find 
    s.removeAtIndex(idx) 
} 
+1

Thay vì kiểm tra * chiều dài trước *, một cách khác có thể sử dụng 'để index = trước (s.startIndex, 5, s.endIndex); if index! = s.endIndex {s.removeAtIndex (index)} '. –

+0

Điểm tuyệt vời. Theo cách nó sẽ tốt đẹp nếu nó trả về một tùy chọn tương tự như 'find', nhưng tôi đoán điều đó có nghĩa là nó sẽ hữu ích hơn trong trường hợp' end' là một chỉ mục hợp pháp mà bạn muốn đưa vào thay vì kết thúc -inđược gửi. –

+0

Có. [Ở đây] (http://stackoverflow.com/a/26691258/1187415) là một ví dụ đơn giản mà thực tế được sử dụng mà phương thức 'advance()' này trả về một chỉ mục hợp lệ (không bắt buộc). –

0

var hello = "hello world!"

Hãy nói rằng chúng ta muốn loại bỏ các "w". (Nó ở vị trí chỉ số thứ 6.)

Đầu tiên: Tạo chỉ mục cho vị trí đó. (Tôi đang thực hiện loại trả về Chỉ mục rõ ràng; không bắt buộc).

let index:Index = hello.startIndex.advancedBy(6)

Thứ hai: Gọi removeAtIndex() và vượt qua nó index chỉ tạo của chúng tôi. (Chú ý nó sẽ trả về các nhân vật trong câu hỏi)

let choppedChar:Character = hello.removeAtIndex(index)

print(hello) // in chào orld!

print(choppedChar) // in w

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