0

I want to sort array data by number value like "90 > 80 > 70 ...> 10".
But I don't know how to compare mutiple property.

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.
}
10
  • 1
    What should your final result look like? Commented Jun 3, 2019 at 8:26
  • 3
    This might be what you are looking for: Sort array of objects with multiple criteria. Commented Jun 3, 2019 at 8:28
  • 1
    @Beginnerrrrrr Do you want to compare by sum of 3 numbers? Commented Jun 3, 2019 at 8:31
  • 1
    At present it is unclear what you are asking for. – Is Item(number1:20, number2:0, number3:0) larger or smaller than Item(number1:0, number2:30, number3:0)? And why? Commented Jun 3, 2019 at 8:31
  • 2
    There is no “just sort” without specifying a sorting order – and that is your task. We cannot guess what you are looking for. Commented Jun 3, 2019 at 8:37

1 Answer 1

1

Sort the elements by the sum of 3 numbers

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
}

[Item(number1: 0.0, number2: 90.0, number3: 0.0),
Item(number1: 0.0, number2: 0.0, number3: 80.0),
Item(number1: 0.0, number2: 70.0, number3: 0.0),
Item(number1: 60.0, number2: 0.0, number3: 0.0),
Item(number1: 0.0, number2: 50.0, number3: 0.0),
Item(number1: 0.0, number2: 0.0, number3: 40.0),
Item(number1: 0.0, number2: 30.0, number3: 0.0),
Item(number1: 20.0, number2: 0.0, number3: 0.0),
Item(number1: 0.0, number2: 0.0, number3: 10.0)]

Sign up to request clarification or add additional context in comments.

2 Comments

I got this Error. The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
should Item(number1: 20.0, number2: 20.0, number3: 20.0) really be bigger than Item(number1: 50.0, number2: 0.0, number3: 0.0)?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.