这是基本问题:我有一个可能具有重复元素的整数数组。我需要知道每个元素的索引,但是当我对数组进行排序时,无论何时从新数组中选择一个元素,我都希望能够引用原始数组中的相同元素。在排序前后对具有重复元素的数组进行索引
我正在寻找解决方案,或者我正在采取的方法的解决方案。
这里是一个数组
a = [1, 2, 3, 4, 3, 5, 2]
有两个2的和两个3的,但如果我与第一2
(左一),我想与指数1工作,如果工作我“M与第二2
工作,我想与指数6来工作,所以我使用一个辅助阵列中,让我做这件事:
helper = [0, 1, 2, 3, 4, 5, 6]
,我将在迭代,并使用从a
访问每个元素。
我本来可以用each_with_index
来完成这个,但是当我排序数组时,问题就开始了。
现在我有一个排序顺序
sort_order = [2, 4, 1, 5, 3]
我用sort_by
按照排序顺序进行排序a
,生产
sorted_a = [2, 2, 4, 1, 5, 3, 3]
你可以假设输入的所有元素在sort_order
存在,以避免sort_by
例外。
现在的问题是我的helper
阵列应该更新以匹配新的位置。每个元素的排序方式与a
进行排序的方式相同,因为尚不清楚新数组中的前两个元素是否位于索引1或原始数组的索引6处。
所以我的新助手阵列可能看起来像
new_helper = [1, 6, 3, 0, 5, 2, 4]
所以,如果我去这种方法,我将如何产生new_helper
阵列,给出原始数组和排序顺序?
也许有更好的方法来做到这一点?
只要该元素的值相同,辅助数组是否指向与原始元素不同的元素,这有什么关系? – 2012-07-25 18:46:43
这些值并不重要(在我使用它们的方法的上下文中),但是位置是。这就是我创建我的帮助程序数组时所想到的,所以新的帮助程序数组应该指向相同的元素。 – MxyL 2012-07-25 19:11:16
然后,您需要自己实现排序逻辑,并且每当您交换数组中的某个位置时,也将它交换到您的帮助程序数组中。 – 2012-07-25 19:13:49