2015-01-29 15 views

risposta

10

Mentre gli indici di stringa non sono ad accesso casuale e non sono numeri, è possibile li avanzare di un numero al fine di accedere al carattere n-esimo:

var s = "Hello, I must be going" 

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

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

Naturalmente, si dovrebbe sempre verificare la stringa è almeno 5 di lunghezza prima di fare questo!

edit: come sottolinea @MartinR, è possibile utilizzare la versione con il fine-index di anticipo per evitare il rischio di correre oltre la fine:

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

Come sempre, optional sono tuo amico:

// 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

Invece di controllare la lunghezza * * in anticipo, si può utilizzare alternativamente 'lasciare index = anticipo (s.startIndex, 5, s.endIndex); if index! = s.endIndex {s.removeAtIndex (index)} '. –

+0

Ottimo punto. In un certo senso sarebbe bello se questo restituisse un optional in modo simile a 'find', ma suppongo che ciò significherebbe che sarebbe meno utile nei casi in cui' end' è un indice legit che vuoi includere piuttosto che la fine di -index sentinella. –

+0

Sì. [Here] (http://stackoverflow.com/a/26691258/1187415) è un semplice esempio in cui viene utilizzato il fatto che questo metodo 'advance()' restituisce un indice valido (non opzionale). –

0

var hello = "hello world!"

Diciamo che vogliamo rimuovere la "w". (È al sesto posto dell'indice.)

Primo: creare un indice per quella posizione. (Sto rendendo il tipo di ritorno Index esplicito, non è obbligatorio).

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

Secondo: Call removeAtIndex() e passarlo nostro indice appena fatta. (Si noti che restituisce il personaggio in questione)

let choppedChar:Character = hello.removeAtIndex(index)

print(hello) // stampa ciao ondo!

print(choppedChar) // stampa w

Problemi correlati