【问题标题】:How to sort an array from a specific key?如何从特定键对数组进行排序?
【发布时间】:2020-11-30 19:57:33
【问题描述】:

目前,我有一个数组声明为:

let VitamineARetinol = "VitamineARetinol"
let VitamineABetacarotene = "VitamineABetacarotene"
let VitamineC = "VitamineC"
let VitamineD = "VitamineD"
let Calories = "Calories"

typealias ListOfAliment = [String: [String: Double]]


let Data: ListOfAliment = [
    "Orange": [VitamineARetinol: 0.5, VitamineC: 0.3, VitamineD: 0.98, Calories: 100],
    "Pomme": [VitamineARetinol: 0.2, VitamineC: 0.2, VitamineD: 0.38, Calories: 120],
    "Poire": [VitamineARetinol: 0.1, VitamineC: 0.7, VitamineD: 0.58, Calories: 140],
    "Laitue": [VitamineARetinol: 0.3, VitamineC: 0.1, VitamineD: 0.92, Calories: 105],
    "Banane": [VitamineARetinol: 0.7, VitamineC: 0.01, VitamineD: 0.63, Calories: 122]
]

var ListOfAlimentClassed = Data

我需要从 Calories 键中对其进行排序,同时保留所有数组数据,如下所示:

ListOfAlimentClassed = [
"Orange": [VitamineARetinol: 0.5, VitamineC: 0.3, VitamineD: 0.98, Calories: 100],
"Laitue": [VitamineARetinol: 0.3, VitamineC: 0.1, VitamineD: 0.92, Calories: 105],
"Pomme": [VitamineARetinol: 0.2, VitamineC: 0.2, VitamineD: 0.38, Calories: 120],
"Banane": [VitamineARetinol: 0.7, VitamineC: 0.01, VitamineD: 0.63, Calories: 122],
"Poire": [VitamineARetinol: 0.1, VitamineC: 0.7, VitamineD: 0.58, Calories: 140]
]

我怎样才能在 Swift 中有效地做到这一点?请帮忙!

【问题讨论】:

  • 您不能对字典进行排序,根据定义,它们是未排序的集合。
  • 您不对字典进行排序,它是键/值系统,而不是索引/值系统。你可以做到这一点,但你会失去它是字典的事实(因为你可以得到键/值的元组),但之后不会是字典。
  • 好的,那么即使我必须将字典的类型更改为另一个,我如何才能将这些数据从较少的热量排序到最多的热量?
  • 为您的数据创建一个结构体,并使用数组代替结构体实例
  • 请给我看看好吗?

标签: swift dictionary nested sorteddictionary


【解决方案1】:

为您的数据创建一个结构并使用数组代替

struct Aliment {
    let name: String
    let vitamineARetinol: Double
    let vitaminC: Double
    let vitaminD: Double
    let calories: Double
}

var array = [
    Aliment(name: "Orange", vitamineARetinol: 0.5, vitaminC: 0.3, vitaminD: 0.98, calories: 100),
    Aliment(name: "Pomme", vitamineARetinol: 0.2, vitaminC: 0.2, vitaminD: 0.38, calories: 120),
]

array.sort(by: { $0.calories < $1.calories })

在Swift Programming Language 书中了解有关结构的更多信息

【讨论】:

  • 非常感谢,我是初学者。
【解决方案2】:
let sorted = ListOfAlimentClassed.sorted { (($0.1[Calories] as? Double) ?? 0) < (($1.1[Calories] as? Double) ?? 0) }

【讨论】:

  • 这个解决方案只有在橙子、豆蔻等食物没有同名的情况下才有效。否则程序崩溃!
猜你喜欢
  • 1970-01-01
  • 2020-06-03
  • 2017-11-07
  • 2016-03-03
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多