如何在 NSString/String 数组中获取最小值和最大值?
Posted
技术标签:
【中文标题】如何在 NSString/String 数组中获取最小值和最大值?【英文标题】:How to get minimum & maximum value in a NSString/String array? 【发布时间】:2015-05-19 11:32:17 【问题描述】:我正在以 NSString 的形式从网站获取数据。数据可能只是整数,有时是整数,附加“a”/“b”表示附加信息,或“#”表示没有可用数据。我已将数据放入数组中:
var labelMin = "-"
var labelMax = "-"
var arr = ["55a", "95a", "66", "25", "88b", "#"]
我的问题是:
考虑到这个数组中的所有对象,我如何获得最小值和最大值(例如,在“95a”中也考虑“95”,但不需要考虑“#”),然后在 labelMin.text 和 labelMax 上打印.text?
[编辑:实际代码将有24个对象在数组中,对应每小时的数据,不断变化]
【问题讨论】:
@sasquatch 我删除了一个类似的问题并重新发布,因为其他人对我的问题进行了一些编辑,并且有人提到我的问题不够清楚。 【参考方案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
【讨论】:
非常感谢。这行得通!但是你能简单解释一下“.join(item.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)).toInt()”是什么意思吗? Here's 一个问题,其中接受的答案包含有关正在发生的事情的一些详细信息:) 谢谢。关于上面的方法,如果我还想在 numbers 数组中保留 6 个空格怎么办? (也许让第 6 项为零?)【参考方案2】:这是 CS 101 的东西。
为最大值和最小值创建 int 变量。将最小值设置为Int.max
,将最大值设置为Int.min
。
编写一个循环遍历数组的for循环,获取每个项目的整数值,如果小于min,则将其保存为min,如果大于max,则将其保存为max。
【讨论】:
我已经更新了我的问题。这个方法还适用吗? 您为什么不尝试一下并找出答案?发现需要实验。【参考方案3】: 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)
以上代码适用于您的情况
【讨论】:
以上是关于如何在 NSString/String 数组中获取最小值和最大值?的主要内容,如果未能解决你的问题,请参考以下文章