【问题标题】:Array how to sort by mutiple property by Swift?数组如何通过Swift按多个属性排序?
【发布时间】:2019-06-03 08:24:33
【问题描述】:

我想按数值对数组数据进行排序,例如“90 > 80 > 70 ...> 10”。
但我不知道如何比较多个属性。

struct Item {
   let number1: Double
   let number2: Double
   let number3: Double
}

let item1 = Item(number1:0, number2:0, number3:10)
let item2 = Item(number1:20, number2:0, number3:0)
let item3 = Item(number1:0, number2:30, number3:0)
let item4 = Item(number1:0, number2:0, number3:40)
let item5 = Item(number1:0, number2:50, number3:0)
let item6 = Item(number1:60, number2:0, number3:0)
let item7 = Item(number1:0, number2:70, number3:0)
let item8 = Item(number1:0, number2:0, number3:80)
let item9 = Item(number1:0, number2:90, number3:0)

var array:[Item] = [item1, item2, item3, item4, item5, item6, item7, item8, item9]

array = array.sorted { (item, nextItem) -> Bool in {
     item.number3 < nextItem.number3 //how to add item's number2 & number1 into here.
}

【问题讨论】:

  • 你的最终结果应该是什么样的?
  • 这可能就是你要找的东西:Sort array of objects with multiple criteria.
  • @Beginnerrrrrr 你想通过 3 个数字的总和来比较吗?
  • 目前还不清楚您要的是什么。 – Item(number1:20, number2:0, number3:0)Item(number1:0, number2:30, number3:0) 大还是小? 为什么?
  • 没有指定排序顺序就没有“仅排序” - 这是您的任务。我们无法猜测您在寻找什么。

标签: arrays swift sorting


【解决方案1】:

按三个数字之和对元素进行排序

array = array.sorted { (item, nextItem) -> Bool in
    let itemSum = item.number1 + item.number2 + item.number3
    let nextItemSum = nextItem.number1 + nextItem.number2 + nextItem.number3
    return itemSum > nextItemSum
}

[项目(编号1:0.0,编号2:90.0,编号3:0.0),
项目(编号1:0.0,编号2:0.0,编号3:80.0),
项目(编号1:0.0,编号2:70.0,编号3:0.0),
项目(编号1:60.0,编号2:0.0,编号3:0.0),
项目(编号1:0.0,编号2:50.0,编号3:0.0),
项目(编号1:0.0,编号2:0.0,编号3:40.0),
项目(编号1:0.0,编号2:30.0,编号3:0.0),
项目(编号1:20.0,编号2:0.0,编号3:0.0),
项目(编号1:0.0,编号2:0.0,编号3:10.0)]

【讨论】:

  • 我收到了这个错误。编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式
  • 应该Item(number1: 20.0, number2: 20.0, number3: 20.0) 真的比Item(number1: 50.0, number2: 0.0, number3: 0.0) 大吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 2020-12-07
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多