【问题标题】:Swift How can I sort a list of clothing sizes (e.g. XL, S, 2XL, XXS)?Swift 如何对服装尺码列表(例如 XL、S、2XL、XXS)进行排序?
【发布时间】:2020-03-11 13:09:06
【问题描述】:

我有一个像这样的字典数组:

[["XL":956], ["M":1010], ["S":998], ["L":955], ["XXL":921], ["XS":1041], ["30":45], ["28":41], ["32":46], ["26":35], ["34":50], ["One Size":1]]

如何对其进行排序以使其按此顺序排列?

[["XS":1041], ["S":998], ["M":1010], ["L":955], ["XL":956], ["XXL":921], ["26":35], ["28":41], ["30":45], ["32":46], ["34":50], ["One Size":1]]

请注意,每个尺寸并不总是存在,它是动态的

【问题讨论】:

  • 对不起,它实际上是字典数组
  • 与其拥有一个包含一个元素的字典数组,不如在数组中使用结构体。代码会更容易阅读,如果需要,您可以在结构中添加业务逻辑和/或其他属性。

标签: ios arrays swift sorting


【解决方案1】:

如果您对了解所有尺寸的字符串有信心,并且很乐意强制解开包装,那么您可以使用单线来完成。

let order = ["XS", "S", "M", "L",  "XL",  "XXL", "26", "28", "30", "32", "34", "One Size"]

let sorted = sizes.sorted{order.firstIndex(of: $0.first!.key)! < order.firstIndex(of: $1.first!.key)!}

根据您要在哪里使用它,更好的选择是安全地打开选项以防数据损坏! :-)

【讨论】:

    【解决方案2】:

    创建一个引用array,其中包含按字母顺序排列的大小。

    现在,sort array 基于参考 array,即

    let data = [["XL":956], ["M":1010], ["S":998], ["L":955], ["XXL":921], ["XS":1041], ["30":45], ["28":41], ["32":46], ["26":35], ["34":50], ["One Size":1]]
    
    let ref = ["XS", "S", "M", "L", "XL", "XXL"]
    
    let result = data.sorted { (val1, val2) -> Bool in
        if let key1 = val1.first?.key, let key2 = val2.first?.key {
            if let x = Int(key1), let y = Int(key2) {
                return x < y
            } else if let x = ref.firstIndex(of: key1), let y = ref.firstIndex(of: key2) {
                return x < y
            } else {
                return ref.firstIndex(of: key1) != nil
            }
        }
        return false
    }
    

    【讨论】:

    • 可以对字典进行排序(结果是键/值元组数组)。不需要第一张地图。
    • @MartinR 之前的问题不同。
    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2012-12-16
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多