2017-09-27 2 views
2

내 문자열과 같은 :처음 두 단어의 문자열에서 첫 글자를 얻기

if let bakery = filtered?[indexPath.row]{ 
    let stringInput = bakery.fruitsname 
       let stringInputArr = stringInput.components(separatedBy: " ") 
       var stringNeed = "" 

       for string in stringInputArr { 
        stringNeed = stringNeed + String(string.characters.first!) 
       } 

    print(stringNeed) // have to print first word first letter, second word second letter 

} 

그러나 내가이 라인에 충돌에 대한 내 3에 대한 수행 할 때 내가 시도 그래서

Apple recipe recapes 

Mango Tengaer 

Lemone T U 

Grapes limoenis Steyic genteur 

입니다 Lemone T U words.On이 라인업은 :

stringNeed = stringNeed + String(string.characters.first!) 

어떤 도움 !!

: 어쩌면 추가 여기에 추가 공간
if let bakery = filtered?[indexPath.row]{ 
let stringInput = bakery.fruitsname 
     let stringInputArr = stringInput.components(separatedBy: " ") 
     var stringNeed = "" 

       for string in stringInputArr { 

//Check the optional 
       if let first = string.characters.first{ 
        stringNeed = stringNeed + String(first) 

       } 
      } 

} 
+2

"내 문자열은 다음과 같습니다."문자열 하나 또는 문자열 배열입니까? – Larme

답변

2

이 시도 (난 다음 충돌하지 않습니다 걱정하지 마십시오 단지 하나의 요소가 있다면 그래서는 처음 2 개 요소를 계산합니다 접두사 2를 추가했습니다). 문자열을 문자열 배열로 분리하고 nil을 제거합니다. 문자열에 이중 공백이 있으면 필터링됩니다. 문자열에 최소 2 단어가 있는지 확인하십시오.

if let bakery = filtered?[indexPath.row]{ 
    let stringInput = bakery.fruitsname 
    if stringInput.components(separatedBy: " ").count >= 2 { 
     let stringNeed = (stringInput.components(separatedBy: " ").map({ $0.characters.first }).flatMap({$0}).reduce("", { String($0) + String($1) }) as NSString).substring(to: 2) 
    print(stringNeed) 
    } 
} 
+1

더 나은 솔루션처럼 보입니다. –

0

확인 옵션

감사

Ar 
MT 
LT 
Gl 
1

그냥 확인해야

배열이

var array = [ 
"Apple recipe recapes", 
"Mango Tengaer", 
"Lemone T U", 
"Grapes limoenis Steyic genteur"] 

for str in array { 
    let wordArray = str.split(separator: " ") 
    if wordArray.count >= 2 { 
     let firstTwoChar = String(wordArray[0].first!)+String(wordArray[1].first!) 
     print(firstTwoChar) 
    } 
} 

출력 카운트가 첫 번째 문자에 대한

Output i expect as per my above words 


AR 
MT 
LT 
GL 
+0

코드를 컴파일 했습니까? 세 번째 개체에서 충돌합니다. –

+0

출력은 내 놀이터 콘솔에서 꺼내지 만 2 칸에서도 아무런 충돌이 없습니다. – Tj3n

0

이 하나를 시도

if let bakery = filtered?[indexPath.row]{ 
    let stringInput = bakery.fruitsname 
      let stringInputArr = stringInput.components(separatedBy: " ") 
      var stringNeed = "" 

      for string in stringInputArr.prefix(2) //returns only first two elements { 

      if let strFirst = string.characters.first{ 
        stringNeed += String(strFirst) 
       } 
     } 

} 
0

여기 내 솔루션은 String 개체 배열을 시작한다는 사실을 유지합니다.

let myStrings:[String] = ["Apple recipe recapes","Mango Tengaer", " Lemone T U", "Grapes limoenis", "Steyic genteur", "He"] 

var retStr = ""; 
for (_, str) in myStrings.enumerated() 
{ 
    let stringInOneLine = str.components(separatedBy: CharacterSet.whitespaces).filter({$0.count > 0}).map({String($0.first!).uppercased()}).prefix(2).joined() 

    //Separate all components by white spaces 
    let c1 = str.components(separatedBy: CharacterSet.whitespaces) 
    print("c1: \(c1)") 

    //Remove components that are empty: It happens in case there is double spaces for instance 
    let c2 = c1.filter({$0.count > 0}) 
    print("c2: \(c2)") 

    //Get only the first letter and in upper case 
    let c3 = c2.map({String($0.first!).uppercased()}) 
    print("c3: \(c3)") 

    //Keep only the first two elements (if there is more or less than 2, it's takend care of 
    let c4 = c3.prefix(2) 
    print("c4: \(c4)") 

    //Reform the String with the first letters 
    let string = c4.joined() 
    print("string: \(string)") 



    retStr.append(stringInOneLine) 
    retStr.append("\n") 
    print("stringInOneLine:\n\(stringInOneLine)") 
} 

print("retStr:\n\(retStr)") 

필요가 쉽게 변경할 수있는 경우 (당신은 예를 들어 문자열의 배열을 원하는 경우) retStr을 구성하는 방식. 나는 각 호출을하는 이유를 설명함으로써 stringInOnLine 구조를 분해했습니다. 그러면 스위프트 전문 기술 수준과 글로벌 프로그래밍/알고리즘 기술에 따라 한 줄로 묶이거나 여러 줄에서 모두를 선호하는지 결정할 수 있습니다. 체인 된 콜을 분해 (디버깅, 이해 또는 생성)하는 방법을 보여줍니다.

(나는 그것이 가장 효율적인 전혀 솔루션입니다 말을하지 않습니다) 첫눈에 조금 이상한 보이지만, 실제로 당신을 위해 일을 할 수
0

:

var input: [String] = ["apple recipe recapes", "Mango Tengaer", "Lemone T U", "Grapes limoenis Steyic genteur", "One", "A B"] 
var result = input.filter { $0.contains(" ") && $0.characters.count > 0 }.map { String($0.first!).uppercased() + $0.substring(with: $0.range(of: "(\\w{1})", options: .regularExpression, range: $0.startIndex..<$0.endIndex)!).uppercased().trimmingCharacters(in: CharacterSet(charactersIn: " ")) } 

result는 실제 :

["AR", "MT", "LT", "GL", "AB"] 

참고 : 그것은 하나의 단어 나 빈 문자열을 무시하지만 당신은 w로 사람들을 위해 확장 할 수 있습니다 필자는 이것이 요구 사항이라면 테스트에서 볼 수 있듯이 공백 만있는 입력 문자열을 처리하지 않는다고 생각합니다.

관련 문제