2015-11-19 10 views

Odpowiedz

15

Nie wiem, co masz na myśli przez „oni nie są w cudzysłowie”, ale czy są one rzeczywiście wtedy Struny coś takiego:

var letterArray = [Character]() 
for string in stringArray { 
    letterArray.append(string.characters.first!) 
} 

EDIT

Aby go jako String zamiast, jak chcesz:

var letterArray = [String]() 
for string in stringArray { 
    letterArray.append(String(string.characters.first!)) 
} 

EDIT 2

Jak Leo Dabus sugeruje, jeśli przejdą pusty ciąg powyższe zawiedzie. Jeśli wiesz, że nigdy nie będzie pusty ciąg ten nie ma zastosowania, ale już aktualizowany wyżej obsłużyć ten przypadek:

var letterArray = [String]() 
for string in stringArray { 
    if let letter = string.characters.first { 
     letterArray.append(String(letter)) 
    } 
} 
+0

I chcesz "letterAray" jako '[String]' zamiast '[Character]' czy to możliwe? – AAA

+0

Ale to nie są struny, to tylko znaki. Jaki masz przypadek użycia, w którym liczy się postać w porównaniu z łańcuchem z jedną literą? – pbush25

+0

Zaktualizował go do przechowywania w postaci ciągu znaków. – myles

11

Xcode 8 beta 3 • Swift 3

extension Collection where Iterator.Element == String { 
    var initials: [String] { 
     return map{String($0.characters.prefix(1))} 
    } 
} 

Xcode 7.3.1 • Swift 2.2.1

extension CollectionType where Generator.Element == String { 
    var initials: [String] { 
     return map{ String($0.characters.prefix(1)) } 
    } 
} 


let stringArray = ["Aruna", "Bala", "Chitra", "Divya", "Fatima"] 

let initials = stringArray.initials // ["A", "B", "C", "D", "F"] 
+0

Świetna odpowiedź, czy możemy stworzyć tablicę unikatowych inicjałów, np. Nie powtarzających się w rozszerzeniu? –

+0

@ChanchalRaj stackoverflow.com/a/39324354/2303865 po prostu dodaj .orderedSet do 'stringArray.initials.orderedSet' –

Powiązane problemy