为什么数字会重复?

时间:2018-03-15 00:57:10

标签: arrays swift sorting

我的最终目标是从文本字段中输入的字符串中提取一系列Ints。为此,我创建了一个函数,其参数是一个String。我使用for循环将文本字段中的所有字符转换为数组。然后我遍历数组并仅将数字(如果它们是< = 24)附加到新数组。当我用数字打印数组时,我得到了array1重复的第一个元素。为什么会这样?

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,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,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,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

3 个答案:

答案 0 :(得分:1)

试试这个

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]

答案 1 :(得分: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 :(得分:0)

我不确定你要做什么,但你可以尝试类似

Swift 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]

您只需要一个数组来保存数字

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

for char in userInput.characters {

}

获取字符串字符数组