【问题标题】:outside array not affected from function appending within外部数组不受函数附加的影响
【发布时间】:2014-10-28 20:54:17
【问题描述】:

我正在处理数组,并创建了一个从内部追加数组的函数。但是,当我打印数组时,它仍然显示为空。什么给了?

    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)

这段代码可以在操场上运行..

感谢您的帮助!

【问题讨论】:

  • 预期结果是什么,有何不同?
  • 这条语句是否在执行:var numberStr = String(queriesTwo[x]) + "th"?
  • 我正在尝试创建一个函数来查找字符串中的所有数字,然后将它们中的每一个放入新数组中,并添加“th”......它用于搜索栏项目我'如果这有帮助的话。是的,该语句执行..“queriesFinal”不只是被附加
  • 所以,queriesFinal 应该是 ["8th"],对吧?如果您将println(queriesFinal) queryValidator(search) 之后移动,这就是您将得到的。
  • "1234567890".uppercaseString ???

标签: arrays xcode swift numbers


【解决方案1】:

正如 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")
}

【讨论】:

  • 感谢您的澄清!我知道其中一部分是语法错误。这就是我需要的答案。
【解决方案2】:

使用正则表达式的另一种方法:

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)")

输出:

结果:[8th, 7th, 6th]

有关正则表达式的信息,请参阅:Regular Expressions

【讨论】:

  • 这绝对是我需要的工作!尽管整个代码对我来说似乎很陌生。我想我需要多学习一些哈哈。我将回顾这一点,以找出其中一些行的含义。感谢您的帮助。
  • 我添加了一个指向正则表达式的链接。基本上它是花哨的模式匹配。 (\\d+) 的含义 \\d 匹配数字,+ 表示一个或多个,外圆括号表示捕获。由于字符串规则,有双 \。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
相关资源
最近更新 更多