2016-05-07 15 views
0

私はこの配列をソートしている今ソートされた配列の元のインデックスを検索

item[0]=B 

item[1]=C 

item[2]=D 

item[3]=A 

を意味し、

item[0]=A 

item[1]=B 

item[2]=C 

item[3]=D 
のようになります。この

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

のような文字列の配列を持っていると仮定

要素Cの元のインデックス(ここでは1)を知りたい。どのようにコードを使用してそれを見つけるのですか?私の質問かもしれないが明確ではない、あなたが理解していないものを私に尋ねてください。

+0

重複した値がありますか? {"B"、 "C"、 "B"、 "A"、 "D"、 "A"} ;; –

+0

いいえ、実際には元のインデックスを取得したかっただけです – Eagle

+0

あなたの配列にユニークな値だけが入っていますか? –

答えて

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] 
1

アレイをソートした後。元の位置をどのようにトレースできますか?

私はちょうど3つのオプション頭に浮かぶ:

  1. 保存ソートプロセス中にあなたがしたすべてのスワップ
  2. は、あなたが実際の位置を保存構造を使用して、ベクトル
  3. の元のコピーを保存し、元の位置。
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); 
} 

あなたはあなたがあなたには、いくつかのadditinalデータを保存することはできませんしない限り、

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

要約:2つの配列unsortedArraysortedArrayがあります。 ソート済み配列の各要素について、対応するインデックスを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); 
} 
関連する問題