我以NSString的形式从网站获取数据。数据可以只是整数,有时是带有表示附加信息的附加“a”/“b”的整数,或者“#”表示没有数据可用。我把数据放到了一个数组中:
var labelMin = "-"
var labelMax = "-"
var arr = ["55a", "95a", "66", "25", "88b", "#"]
我的问题是:
我如何获得最低&考虑该阵列中的所有对象的最大值(例如,也考虑“95a”中的“95”,但不需要考虑“#”),并随后在labelMin.text&上打印出来。 labelMax.text?
[编辑:实际代码将在数组中有24个对象,对应于每小时的数据,这是不断变化的]
答案 0 :(得分:1)
这是CS 101的东西。
为max和min创建int变量。将min设置为Int.max
,将max设置为Int.min
。
写一个循环遍历数组的for循环,取每个项的整数值,如果它小于min,则将其保存到min,如果它大于max,则保存它到最大
答案 1 :(得分:1)
@ user3815344的答案有效,但您可以使用minElement
和maxElement
来检索最小值和最大值,从而简化它。例如:
let arr = ["55a", "95a", "66", "25", "88b", "#"]
let numbers: [Int] = arr.reduce([]) {
if let num = "".join($1.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)).toInt() {
return $0 + [num]
}
return $0
}
minElement(numbers) // 25
maxElement(numbers) // 95
针对Swift 2进行了更新:toInt
已替换为Int
上的可用初始值设定项String
,而minElement
和maxElement
已被替换为let arr = ["55a", "95a", "66", "25", "88b", "#"]
let numbers: [Int] = arr.reduce([]) {
if let num = Int("".join($1.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet))) {
return $0 + [num]
}
return $0
}
let min: Int? = numbers.minElement() // 25
let max: Int? = numbers.maxElement() // 95
协议扩展:
ConfigurationManager.OpenExeConfiguration
答案 2 :(得分:0)
var arr = ["55a", "95a", "66", "25", "88b", "#"]
var minval = 0
var maxval = 0
for val in arr{
var Number = "".join(val.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet))
if Number.toInt() >= 0{
if val == arr[0]{
minval = Number.toInt()!
maxval = minval
} else{
if Number.toInt() < minval{
minval = Number.toInt()!
}
if Number.toInt() > maxval{
maxval = Number.toInt()!
}
}
}
}
println(maxval)
println(minval)
以上代码适用于您的案例