私は素早い配列をソートし、元のインデックスを追跡します。例えば: arrayToSort = [1.2、5.5、0.7、1.3]すぐに配列を並べ替えて元のインデックスを維持する
indexPosition = [0、1、2、3]
sortedArray = [5.5、1.3、1.2、0.7]
indexPosition = [1、3、0、2]
これを行う簡単な方法はありますか?おそらく、
私は素早い配列をソートし、元のインデックスを追跡します。例えば: arrayToSort = [1.2、5.5、0.7、1.3]すぐに配列を並べ替えて元のインデックスを維持する
indexPosition = [0、1、2、3]
sortedArray = [5.5、1.3、1.2、0.7]
indexPosition = [1、3、0、2]
これを行う簡単な方法はありますか?おそらく、
これらの線に沿って何か
let arrayToSort = [1.2, 5.5, 0.7, 1.3]
var oldIndices = [Int]()
let sortedArray = arrayToSort.sort { $0 > $1 }
var newIndices = [Int]()
for element in arrayToSort
{
oldIndices.append(arrayToSort.indexOf(element)!)
newIndices.append(sortedArray.indexOf(element)!)
}
print(oldIndices)
print(newIndices)
あなたはまた、タプルを使用することができます。
var indices = [(Int,Int)]()
indices.append((arrayToSort.indexOf(element)!,sortedArray.indexOf(element)!))
struct
を使用すると、インデックス位置に追いつくことができます。
struct Foo {
var value: Double
var position: Int
}
let arrayToSort = [Foo(value: 1.2, position: 0), Foo(value: 5.5, position: 1), Foo(value: 0.7, position: 2), Foo(value: 1.3, position: 3)]
let sortedArray = arrayToSort.sorted { $0.value > $1.value }
let indexPosition = sortedArray.map { $0.position }
最も簡単な方法は列挙です。 Enumerateは、配列内の各要素に、表示されている順序でインデックスを渡します。次に、それらを別々に扱うことができます。
let sorted = arrayToSort.enumerate().sort({$0.element > $1.element})
これは[(0.0 1 0.1 5.5)、(0.0 3 0.1 1.3)、(0.0 0 0.1 1.2)、(0.0 2 0.1 0.7)になります]
をソートインデックス取得するには:@twiz_から答えを
let justIndices = sorted.map{$0.index} // [1, 3, 0, 2]
おかげで、私は構文はSwift3のビットを変更し、私はちょうど遊び場に次のコードを検証したと思います。それは動作します
let arrayToSort = [1.2, 5.5, 0.7, 1.3]
let sorted = arrayToSort.enumerated().sorted(by: {$0.element > $1.element}) // [(1, 5.5), (3, 1.3), (0, 1.2), (2, 0.69999999999999996)]
let justIndices = sorted.map{$0.offset} // [1, 3, 0, 2]
あなたは2つの別々のアレイを維持していますか? – Santosh