[英]Find the original index of sorted array
假设我有一个这样的String数组
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)。 如何使用代码找到它? 可能是我的问题不明确,请问我一些你不明白的事。
除非您保存一些附加数据,否则不能。 您可以将索引和值放在一个类中并按值排序,或者您可以定义一个包含索引的数组并对该数组进行排序:
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]
对数组进行排序后。 你怎么能追踪你原来的位置?
我想到了3个选项:
在对数组进行排序之前,请使用映射来存储数组元素的原始索引,如下所示。
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"
回顾一下:你有两个数组, 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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.