私はこのような配列があります。デルタとの配列の配列をソート
[[300, 400], [200, 300], [500, 600], [400, 200]]
私が欲しい別の配列は、他の値によってソートされ、最初の項目がその値に近づくべきであるようにすることです、私デルタでソートしてみました:
c = [300, 50]
f = [[200, 300], [300, 400], [400, 200], [500, 600]].sort do |a, b|
a_width_delta = a.first - c.first
a_height_delta = a.last - c.last
b_width_delta = b.first - c.first
b_height_delta = b.last - c.last
(a_width_delta + a_height_delta) <=> (b_width_delta + b_height_delta)
end
p "Input #{c}"
p f
c = [300, 400]
f = [[200, 300], [300, 400], [400, 200], [500, 600]].sort do |a, b|
a_width_delta = a.first - c.first
a_height_delta = a.last - c.last
b_width_delta = b.first - c.first
b_height_delta = b.last - c.last
(a_width_delta + a_height_delta) <=> (b_width_delta + b_height_delta)
end
p "Input #{c}"
p f
この条件は正しいです:
$> ruby fo.rb
"Input [300, 50]"
[[200, 300], # other elements] # correct!
もう一つは間違っている:
"Input [300, 400]"
[[200, 300], # other elements] # wrong!
それは次のようになります。
"Input [300, 400]"
[[300, 400], # other elements] # correct!
私が必要なのは最初のインデックスに最も近い値を持つ配列です。
私は第二の例のためのあなたの「正しい」結果を生成する一連のルールを思い付くことができません。たとえば、[[500、600]が[200,300]の前に表示されるのはなぜですか? – smarx
あなたがしようとしていることを理解していれば、 '[500,600]'は '200 + 200 = 400'の違いがあります。これは' '[200,300] '100 + 100 = 200'となる。 – smarx
私の悪い、それは少し漠然としています、私はそれが最初のインデックスで最も近い値を持つソートされた配列です。並べ替えの仕方がわからないので、デルタで並べ替えを試みました。 –