如何检查数组字符串元素是否包含数字

时间:2020-01-02 11:10:52

标签: ios arrays swift

假设我有一个数组:

var myArray = ["bla_01", "bla_02", "tra", "bla", "tra_01", "tra_14]

我想对它们进行排序,并且只获取其中包含数字的字符串。因此,我的func仅需返回“ bla_01”,“ bla_02”,“ tra_01”,“ tra_14”值。

我现在有这样的代码,但是它将仅获得第一个值,并且如果存在item_01,item_02,bla_02,则将仅删除item_01,item_02并忽略bla_02。然后排序并返回仅具有最高编号的相同名称值。

    func unequeValues() {
    var number = 1
    for item in tricks {
        if item.contains("\(number)") {
              print(item)
            number += 1
        }

    }

}

3 个答案:

答案 0 :(得分:1)

使用String类中的rangeOfCharacter方法的简单Swift 4版本:

let myArray = ["bla_01", "bla_02", "tra", "bla", "tra_01", "tra_14"]

let filteredArray = myArray.filter{$0.rangeOfCharacter(from: .decimalDigits) != nil }
                               .sorted{$0.localizedStandardCompare($1) == .orderedAscending}

答案 1 :(得分:1)

var myArray = ["bla_01", "bla_02", "tra", "bla", "tra_01", "tra_14"]

let newArray = myArray.filter { (substring) -> Bool in
    let numbersRange = substring.rangeOfCharacter(from: .decimalDigits)
    let hasNumbers = (numbersRange != nil)
    return hasNumbers
}
print(newArray)

答案 2 :(得分:1)

用正则表达式过滤数组(跳过没有数字的项目)并按数字排序

let myArray = ["bla_01", "bla_02", "tra", "bla", "tra_01", "tra_14"]
let filteredArray = myArray.filter{$0.range(of: "[0-9]+", options: .regularExpression) != nil }
                           .sorted{$0.localizedStandardCompare($1) == .orderedAscending}

,或者如果最后一个 good 字符始终是数字,则效率更高

let myArray = ["bla_01", "bla_02", "tra", "bla", "tra_01", "tra_14"]
let filteredArray = myArray.filter{$0.last?.isNumber == true }
                           .sorted{$0.localizedStandardCompare($1) == .orderedAscending}

通过添加rangeOfCharacter(from选项,可以大大改善backwards解决方案

let filteredArray = myArray.filter{$0.rangeOfCharacter(from: .decimalDigits, options: .backwards) != nil }
                           .sorted{$0.localizedStandardCompare($1) == .orderedAscending}