2014-10-28 47 views
1

我正在處理數組,並且我創建了一個函數,該函數從內部追加數組。但是,當我打印數組時,它仍然顯示爲空。是什麼賦予了?外部數組不受函數附加影響

var queriesFinal : [String] = [] 

func queryValidator(search : String) 
{ 
    var letterSet = NSCharacterSet(charactersInString: "abcdefgjhijklmnopqrstuvwxyz ") 
    var numberSet = NSCharacterSet(charactersInString: "1234567890".uppercaseString) 
    var queriesTwo : [String] = search.lowercaseString.componentsSeparatedByCharactersInSet(letterSet) 

    for(var x = 0; x < queriesTwo.count; x++) 
    { 
     for(var y = 0; y < 10; y++) 
     { 
      var str = String(y) 
      if(queriesTwo[x] == str) 
      { 
       var numberStr = String(queriesTwo[x]) + "th" 
       queriesFinal.append(numberStr) 
      } 
     } 
    } 
} 


println(queriesFinal) 

search = "Matt 8th" 

queryValidator(search) 

這個代碼可以在操場玩耍..

我明白任何幫助!

+0

什麼是預期的結果,它有什麼不同? – Antonio 2014-10-28 20:58:26

+0

是這個語句執行:var numberStr = String(queriesTwo [x])+「th」? – 2014-10-28 20:58:55

+0

我試圖做一個函數,找到一個字符串中的所有數字,然後將它們中的每一個放入新的數組中,將「th」添加到它們中...對於我正在做的搜索欄項目,如果這有幫助。是的,該語句執行..「查詢最終」不只是追加 – 2014-10-28 21:00:45

回答

0

正如Mike S所提到的,你犯了一個小錯誤println應該在你的queryValidator之後,我還添加了一個可選項,以防你的queryValidator搜索返回nil,也如Zaph所提到的那樣你不需要numberSet ,所以我刪除它:

func queryValidator(search : String) -> [String]? { 
    let queriesTwo:[String] = search.lowercaseString.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: "abcdefgjhijklmnopqrstuvwxyz ")) 
    var queriesResult:[String] = [] 
    for x in 0...queriesTwo.count-1 { 
     for y in 0...9 { 
      if(queriesTwo[x] == String(y)) { 
       queriesResult.append(String(queriesTwo[x]) + "th") 
      } 
     } 
    } 
    return queriesResult.count > 0 ? queriesResult : nil 
} 
var search = "Matt 8 less7" 
if let queriesFinal = queryValidator(search) { 
    println(queriesFinal) 
} else { 
    println("no result") 
} 
+0

謝謝澄清!我知道它的一部分是語法錯誤。這是我需要的答案。 – 2014-10-30 06:33:45

+0

不客氣 – 2014-10-30 13:25:36

0

與正則表達式的另一種方法:

func queryValidator(search: String) -> [String] { 
    var queriesFinal:[String] = [] 

    var nsSearch: NSString = search 
    let pattern = "(\\d+)" 
    var regEx = NSRegularExpression(pattern:pattern, options:nil, error:nil) 

    regEx?.enumerateMatchesInString(nsSearch, options:nil, range:NSMakeRange(0, nsSearch.length), usingBlock: { (result, flags, stop) in 
     let found = nsSearch.substringWithRange(result.range) 
     queriesFinal.append("\(found)th") 
    }) 
    return queriesFinal 
} 

var result = queryValidator(search) 
println("result: \(result)") 

輸出:

結果:8日,第7,第6]

有關正則表達式的信息,請參閱:Regular Expressions

+0

這絕對是我需要的工作!儘管整個代碼對我來說似乎非常陌生。我想我需要學習更多的哈哈。我要回過頭來看看這些線的含義。感謝您的幫助。 – 2014-10-30 06:30:12

+1

我添加了正則表達式的鏈接。基本上它是花式模式匹配。 (\\ d +)的含義\\ d匹配數字,+表示一個或多個,外部圓括號表示捕獲。由於字符串規則,有雙\。 – zaph 2014-10-30 12:06:03