For data below, I want to sort selected indexes by value density (value/weight) descending. When equal, I want to sort among 'equals' by the weight, ascending.
let values = [40, 50, 60, 80, 100, 120, 20, 10]
let weights = [20, 80, 60, 160, 50, 120, 10, 5]
// Selection array
let arr2 = [ 0, 1, 1, 0, 1, 0, 0, 1]
// Get index from selection
var selectedIndexes = [Int]()
arr2.enumerated().forEach { (index, element) in
if element == 1 {
selectedIndexes.append(index)
}
}
// without any sorting
print(selectedIndexes) // [1, 2, 4, 7]
// sort descending by value density
selectedIndexes.sort(by: { Double(values[$0])/Double(weights[$0]) > Double(values[$1])/Double(weights[$1]) } )
print(selectedIndexes) // [4, 7, 2, 1]
Items at index 4 and 7 both have value density of 2.0. How could I make sort by weights ascendant when value density is equal? So I will have [7, 4, 2, 1] in selectedIndexes array