如何在NSString / String数组中获取最小值和最大值?

我以NSString的forms从网站获取数据。 数据可能只是整数,有时是用“a”/“b”表示附加信息的整数,或者“#”表示没有可用的数据。 我已经把数据存入一个数组中了:

var labelMin = "-" var labelMax = "-" var arr = ["55a", "95a", "66", "25", "88b", "#"] 

我的问题是:

考虑到数组中的所有对象(例如也考虑“95a”中的“95”,但不需要考虑“#”),我如何获得最小值和最大值,然后在labelMin.text&labelMax.text上打印出来?

[编辑:实际的代码将在数组中有24个对象,对应于每个小时,这是不断变化的数据]

@ user3815344的答案有效,但是可以通过使用minElementmaxElement检索最小值和最大值来简化它。 例如:

 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已经被replace为Int的一个failable的初始化程序,它接受一个StringminElementmaxElement被协议扩展取代:

 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 

这是CS 101的东西。

为max和min创buildintvariables。 将min设置为Int.max ,将max设置为Int.min

写一个循环遍历你的数组,获取每个项目的整数值,如果小于min,则将其保存为min,如果大于max,则将其保存为max。

  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) 

上面的代码将适用于你的情况