【问题标题】:Why is the number repeating?为什么数字重复?
【发布时间】:2018-03-15 00:57:10
【问题描述】:

我的最终目标是从文本字段中输入的字符串中提取一个整数数组。为此,我创建了一个参数为字符串的函数。我使用 for 循环将文本字段中的所有字符放入一个数组中。然后我遍历数组并仅将数字(如果它们

var array1 = [String]()
var array2 = [Int]()

func getDigits (userInput: String) {
    for element in userInput {
        array1.append(String(element))
    }
    var mx = 0
    var fx = 1
    func findNumbers() {
        for number in 1...24 {
            if array1[mx] == "\(fx)" {
                array2.append(Int(String(array1[mx]))!)
            } else {
                fx += 1
                findNumbers()
            }
        }
    }
findNumbers()
print (array2)
}
getDigits(userInput: "4-5")

输出:[4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]

【问题讨论】:

  • 使用调试器。逐行浏览代码,看看你的错误。
  • 提示:mx 是什么,它将包含什么值?
  • @CharlesSrstka 感谢您的帮助!我不明白你的暗示。 mx 只是一个计数器
  • @Theodore.K 但是是这样吗?
  • @Theodore.K 取决于你想要做什么。最简单和最干净的事情实际上可能是完全摆脱 mx 计数器,只需使用 for..in 循环遍历 array1

标签: arrays swift sorting


【解决方案1】:

这将支持您的输入字符串中的多位数字,并过滤超出范围的值。

import Foundation

func parseNumbers (userInput: String, splitBy: String, min: Int, max: Int) -> Array<Int> {
    let separators = CharacterSet(charactersIn: splitBy)
    let numericStrings = userInput.components(separatedBy: separators)

    var numArray = [Int]()

    for item in numericStrings {
        if let number = Int(item) {
            if (number >= min) && (number <= max) {
                numArray.append(number)
            }
        }
    }

    return numArray
}

print(parseNumbers(userInput: "5:hello,34-7 12;103,abc", splitBy: " -:,;", min:1, max:24))

输出:[5,7,12]

【讨论】:

    【解决方案2】:

    试试这个

    func getDigits (userInput: String) {
       let splitsCharacters = ",;:- "
       let seperators = CharacterSet(charactersIn: splitsCharacters)
       let updateInput = userInput.components(separatedBy: seperators)
       print(array1)
       func findNumbers() {
          for item in updateInput {
              if let number = Int(item) {
                  if  number <= 24{
                      array2.append(number)
                  }
              }
          }
       }
       findNumbers()
       print (array2)
    }
    getDigits(userInput: "4-5 hello, 34;12,23")
    

    输出:[4, 5,12,23]

    【讨论】:

    • 你是个天才!谢谢!
    • 发现一个问题:它不适用于两位数。
    【解决方案3】:

    我不确定您要做什么,但您可以尝试类似的方法

    斯威夫特 4

    func getDigits (userInput: String) {
        var resultArray = [Int]()
        for char in userInput {
            if let number = Int("\(char)"), number < 24 {
                resultArray.append(number)
            }
        }
    
        print(resultArray)
    }
    

    测试

    getDigits(userInput: "4-5")
    //prints => [4, 5]
    

    你只需要 1 个数组来保存数字

    注意:在swift中字符串是数组类型,所以你可以直接循环它,但对于早期版本你可以使用:

    for char in userInput.characters {
    
    }
    

    获取字符串字符数组

    【讨论】:

    • 感谢您的帮助!但是,这不适用于像“14-16”这样的两位数
    • 是的,那是因为您要检查每个字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多