2017-03-21 6 views
0

문자열을 구성하는 문자의 위치를 ​​찾으려고합니다. 예를 들어, 추가 계산을 위해 "문자"단어에서 문자 "c"의 위치를 ​​알아야합니다.문자열 배열의 문자 swift

은 내가 콘솔에서 얻을 모든이 제로입니다

for letters in Array("character".characters) { 
    if "c".contains(String(letters)) { 
    if let i = Array("character".characters).index(of: letters) { 
    print(i) 
    } 
    } else { print("wrong letter") } 
    } 

// Console: 
0 
wrong letter 
wrong letter 
wrong letter 
wrong letter 
0 
wrong letter 
wrong letter 
wrong letter 

을 시도; 그것은 단지 "캐릭터"에서 첫 번째 c의 인덱스를 제공하지만 두 번째 인덱스에서는 그렇지 않습니다. "잘못된 문자"가 출력된다는 사실은 루프가 올바르게 실행되고 있음을 의미합니다. 그것은 심지어 두 번째 c의 위치를 ​​인식합니다. 올바른 인덱스를 제공하지 않고 있습니다.

답변

1

당신의 코드가 의도 한대로 작동하지 않는 당신이 할 수있는 "c"를 검색 할 때 항상 인덱스 0을 반환합니다.

당신은 enumerated(), 해당 인덱스와 함께 사용자에게 문자를 제공 , 를 사용하여 작업을 단순화하고 모든 Array() 변환을하고 불필요한 index(of:)를 통해 검색 할 수 있습니다 당신이 원하는 경우

let word = "character" 
let search = Character("c") 

for (index, letter) in word.characters.enumerated() where letter == search { 
    print(index) 
} 
// 0 5 

또는, 이것은 더

에 최적화 될 수

let indices = word.characters.enumerated() 
    .filter { $0.element == search } 
    .map { $0.offset } 


print(indices) // [0, 5] 

: 배열로 인덱스

let indices = word.characters.enumerated() 
    .flatMap { $0.element == search ? $0.offset : nil } 

문자열 다음 다른 방법이 더 적합 할 수있는 경우, 예컨대 참조 Find all indices of a search term in a string.

0

Array("character".characters).index(of: letters) 

항상 문자열, 예를 들어,에 편지의 발생을 발견하기 때문에

let test = "character" 
let arr = Array(test.characters) 
for i in 0..<arr.count { 
if arr[i] == "c"{ 

    print(i) 
    } else { print("wrong letter") } 

} 
output 
// 0 
//wrong letter 
//wrong letter 
//wrong letter 
//wrong letter 
//5 
//wrong letter 
//wrong letter 
//wrong letter