如何在 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 的答案有效,但是您可以通过使用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 已被替换为 Int 上的可失败初始化程序,该初始化程序采用 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

【讨论】:

非常感谢。这行得通!但是你能简单解释一下“.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 数组中获取最小值和最大值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Objective-C 中打印单个数组元素?

如何在 iOS 中取消完成处理程序

如何从数组中返回所有消息

Objective-C 之字符串与数值

如何在其他视图控制器中获取 nsuserdefault 值

如何在 iOS 上获取 Facebook 访问令牌