假设我有一个数组:
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
}
}
}
答案 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}