2つの配列を紐づけて，一方の配列の昇順又は降順にソート関連して他方の配列を並び替えたい


2つの配列`arr`と`brr`があったとき，`arr`の昇順又は降順のソートに関連して`brr`を並び替えたいです．  
2次元配列でもHashでも構いません（手法が他にあれば教えていただきたいです）  
ご教授よろしくおねがいします．

具体例を以下に示します．`arr`と`brr`の配列の長さは同一の条件です．

[code]

    arr = [5, 8, 1, 3, 4, 7, 9, 6]
    brr = [17, 15, 13, 10, 19, 12, 14, 18]
    
    # 例えば以下
    arr.sort!
    # => [1, 3, 4, 5, 6, 7, 8, 9]
    # => brrは[13, 10, 19, 17, 18, 12, 15, 14]と並び替えられる
    
[/code]




arr と brr のペアの配列を作ってからソートするというのはどうでしょうか。

[code]

    arr = [5, 8, 1, 3, 4, 7, 9, 6]
    brr = [17, 15, 13, 10, 19, 12, 14, 18]
    
    hoge = arr.zip(brr)
    #=> [[5, 17], [8, 15], [1, 13], [3, 10], [4, 19], [7, 12], [9, 14], [6, 18]]
    fuga = hoge.sort_by(&:first)
    #=> [[1, 13], [3, 10], [4, 19], [5, 17], [6, 18], [7, 12], [8, 15], [9, 14]]
    arr = fuga.map(&:first)
    #=> [1, 3, 4, 5, 6, 7, 8, 9]
    brr = fuga.map(&:last)
    #=> [13, 10, 19, 17, 18, 12, 15, 14]
    
[/code]




Ruby配列での解答は皆さんすでに書かれています。  
NArrayでやるとこうなります。

[code]

    require 'numo/narray'
    
    a = Numo::Int8[5, 8, 1, 3, 4, 7, 9, 6]
    b = Numo::Int8[17, 15, 13, 10, 19, 12, 14, 18]
    
    b[a.sort_index]
    
[/code]

=> Numo::Int8(view)#shape=[8]  
[13, 10, 19, 17, 18, 12, 15, 14]

Int8が対応できる範囲は狭いので、必要に応じてInt64やDFloatなどをお使いください。

