假设我有一个像这样的字符串数组
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)。如何使用代码找到它?可能是我的问题不明确,请问我一些你不理解的事情。
答案 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个选项:
答案 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);
}