找到已排序数组的原始索引

时间:2016-05-07 10:53:01

标签: java android arrays

假设我有一个像这样的字符串数组

String [] item={"B","C","D","A"};

这意味着

item[0]=B

item[1]=C

item[2]=D

item[3]=A

现在我对这个数组进行了排序并得到了像

item[0]=A

item[1]=B

item[2]=C

item[3]=D

我想知道元素C的原始索引(这里是1)。如何使用代码找到它?可能是我的问题不明确,请问我一些你不理解的事情。

4 个答案:

答案 0 :(得分:2)

除非您保存一些附加数据,否则不能。你可以,例如将索引和值都放在一个类中并按值排序,或者你可以定义一个包含索引的数组并改为对该数组进行排序:

Integer[] indices = new Integer[item.length];
for (int i = 0; i < indices.length; i++) {
    indices[i] = i;
}

Arrays.sort(indices, new Comparator<Integer>() {

    public int compare(Integer i1, Integer i2) {
        return item[i1].compareTo(item[i2]);
    }
});

排序值:

item[indices[0]]
item[indices[1]]
item[indices[2]]
item[indices[3]]

原始索引

indices[0]
indices[1]
indices[2]
indices[3]

答案 1 :(得分:1)

对数组进行排序后。你怎么能追踪你原来的位置?

我只想到3个选项:

  1. 保存您在排序过程中执行的所有互换
  2. 保存矢量的原始副本
  3. 使用可以保存实际位置和原始位置的结构。

答案 2 :(得分:0)

在对数组进行排序之前,请使用地图存储数组元素的原始索引,如下所示。

String[] item = { "B", "C", "D", "A" };
Map<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < item.length; i++) {
    map.put(item[i], i);
}

当您需要拨打以下电话时

map.get("A"); // here return the original index of "A"

答案 3 :(得分:0)

回顾:你有两个数组, unsortedArray sortedArray 。对于 sortedArray 的每个元素,您希望在 unsortedArray 中检索相应的索引。

public int getCorrespondingIndex(String[] unsortedArray, String[] sortedArray, int index){
   for(int i=0; i<unsortedArray.length; i++)
     if(sortedArray[index].equals(unsortedAray[i])
       return i;
   return -1;
}

public static void main(String args[]){
  int oldIndex;
  String[] unsortedArray = {"B","C","D","A"};
  String[] sortedArray= {"A", "B", "C", "D"};
  for(i=0; i<sortedArray.length; i++){
    oldIndex = getCorrespondingIndex(unsortedArray, sortedArray, i);
    System.out.println("The element "+sortedArray[i]+" was in position "+oldIndex);
}