当前位置: 首页 > 知识库问答 >
问题:

使用Swift 4按双属性值对自定义对象数组进行排序

朱海超
2023-03-14
class Market  {
    var name = String?
    var volume = Double?
}

我试过了,但不起作用,二进制运算符'>'不能应用于两个'double?‘操作数

self.market.sort(by:{$0.volume > $1.volume})

做这件事最方便快捷的方法是什么?

共有1个答案

胡利
2023-03-14

由于volume是可选的,所以不能直接比较这两个值(除了使用==)。因此,您需要决定将一个丢失的音量值与另一个丢失的音量值或与有效的音量值进行比较意味着什么。

如果希望保持简单,可以将丢失的卷值视为零。然后代码变成:

self.market.sort { ($0.volume ?? 0) > ($1.volume ?? 0) }

更复杂的版本总是在最后对零卷值进行排序:

self.market.sort {
    if let v1 = $0.volume {
        if let v2 = $1.volume {
            // Both values exist
            return v1 > v2
        } else {
            // there is no v2 - treat v1 as < v2
            return false
        }
    } else {
        if let v2 = $1.volume {
            // there is no v1 - treat v2 as < v1
            return true
        } else {
            // both are nil
            return true
        }
    }
}
self.market.sort {
    if let v1 = $0.volume {
        if let v2 = $1.volume {
            // Both values exist
            return v1 > v2
        } else {
            // there is no v2 - treat v1 as < v2
            return false
        }
    } else {
        return true
    }
}
 类似资料:
  • 假设我们有一个名为的自定义类,该类包含两个属性: 其中许多存储在一个阵列中: 如何按“fileID”升序或降序对图像数组进行排序?

  • 问题内容: 我已经使用AJAX获得了以下对象并将它们存储在数组中: 如何仅使用JavaScript 创建一个函数以按属性 升序 或 降序 对对象进行排序? 问题答案: 按价格升序对房屋进行排序: 或在ES6版本之后:

  • 问题内容: 我有一个对象数组,这些对象的属性称为“ CODE”。 如何通过自定义顺序对数组进行排序,例如: 尝试各种方法均未成功。请帮忙。 问题答案: 您可以将函数与函数一起使用。

  • 问题内容: 可以说我们有一个名为imageFile的自定义类,该类包含两个属性。 其中很多存储在数组中 问题是:如何按“ fileID” ASC或DESC对图像数组进行排序? 问题答案: 首先,将Array声明为类型化数组,以便在迭代时可以调用方法: 然后,您可以简单地执行以下操作: 迅捷2 迅捷3+ 上面的示例给出了 desc 排序顺序

  • 问题内容: 我有一个JavaScript对象数组: 如何按JavaScript中的值对它们进行排序? 我知道,但这似乎只适用于字符串和数字。我是否需要向对象添加方法? 问题答案: 编写自己的比较函数很容易: 或内联(c / o Marco Demaio):

  • 问题内容: 如果我有一个JavaScript对象,例如: 有没有一种方法可以基于值对属性进行排序?这样我最终 问题答案: 将它们移动到一个数组,对该数组进行排序,然后将其用于您的目的。这是一个解决方案: 拥有数组后,您可以按自己喜欢的顺序从数组中重建对象,从而完全实现了您打算要做的事情。在我所知道的所有浏览器中都可以使用,但这取决于实现的怪癖,并且可能随时中断。您永远不应假设JavaScript对