【问题标题】:How to get minimum & maximum value in a NSString/String array?如何在 NSString/String 数组中获取最小值和最大值?
【发布时间】: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 我删除了一个类似的问题并重新发布,因为其他人对我的问题进行了一些编辑,并且有人提到我的问题不够清楚。

标签: ios arrays swift


【解决方案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)

以上代码适用于您的情况

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2010-11-23
    • 2011-08-16
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多