2014-06-08 28 views
1

我是編程新手。我做了一個刪除阿拉伯文字輸入元音的功能。我的問題是,如果我爲任務使用了最好的循環,還是有更好更簡潔的方式來寫這個?阿拉伯語文字剝離器/解析器

這將是很好的改善代碼。謝謝。

// It seems to work now. I solved it. 
// What do you think? :) Happy that I managed to solve it. 
// Programming is fun!!! :D 
var arabic:String = "الْعَرَبِيَّةُ لُغَةٌ جَمِيلَةٌ" 

func txtStripper(arabic: String) -> String { 
    var strippedTxt = "" 
    for character in arabic { 
     if character != "َ" && character != "ِ" && character != "ّ" && character != "ْ" && character != "ُ" && character != "ٌ" && character != "ً" && character != "ٍ" { 
      strippedTxt += toString(print(character)) 
     } 
    } 
    return strippedTxt 
} 
txtStripper(arabic) 
+0

一個有趣的事實。我坐了幾個小時,解決了代碼。你知道問題是什麼嗎?我忘了將打印(字符)轉換爲字符串。 :)至少我正在努力自己解決問題。 =) – akhansson88

回答

0

都可以使用contains功能清理if聲明的第一位。

func txtStripper(arabic: String) -> String { 
    var strippedTxt = "" 
    let vowels : Character[] = ["َ", "ِ", "ّ", "ْ", "ُ", "ٌ", "ً", "ٍ"] 

    for character in arabic { 
     if !contains (vowels, character) { 
      strippedTxt += toString(character) 
     } 
    } 
    return strippedTxt 
} 

接下來,如果你是舒服關閉,你可以更簡潔的方式重寫整個功能如下:

func txtStripperWithClosures(arabic:String) -> String { 
    let vowels : Character[] = ["َ", "ِ", "ّ", "ْ", "ُ", "ٌ", "ً", "ٍ"] 
    return Array(arabic).filter({!contains(vowels, $0)}).reduce("",+) 
} 

其工作原理如下:

  • Array(arabic)圈將字符串轉換爲字符[]
  • filter({!contains(vowels, $0)})刪除數組中的元音字符
  • reduce("",+)將字符列表重新加入字符串
+0

謝謝你的真棒反饋。我會詳細閱讀關閉。看起來非常整齊。 – akhansson88