根据给定的顺序对数字数组进行排序

MxL*_*evs 5 ruby

我有两个数组.第一个数组包含排序顺序.第二个数组包含任意数量的元素.

我有一个属性,保证第二个数组中的所有元素(按值)保证在第一个数组中,我只使用数字.

A = [1,3,4,4,4,5,2,1,1,1,3,3]
Order = [3,1,2,4,5]
Run Code Online (Sandbox Code Playgroud)

当我排序时A,我希望元素按照指定的顺序出现Order:

[3, 3, 3, 1, 1, 1, 1, 2, 4, 4, 4, 5]
Run Code Online (Sandbox Code Playgroud)

请注意,重复是公平的游戏.A中的元素不应更改,只能重新排序.我怎样才能做到这一点?

Gar*_*eth 11

>> source = [1,3,4,4,4,5,2,1,1,1,3,3]
=> [1, 3, 4, 4, 4, 5, 2, 1, 1, 1, 3, 3]
>> target = [3,1,2,4,5]
=> [3, 1, 2, 4, 5]
>> source.sort_by { |i| target.index(i) }
=> [3, 3, 3, 1, 1, 1, 1, 2, 4, 4, 4, 5]
Run Code Online (Sandbox Code Playgroud)

  • @MichaelKohl你提出了一个很好的观点,如果这个阵列可能会变大,那么这个方法可能会被重新考虑,但这对于大多数用途来说应该足够快 (2认同)