2

配列をソートし、ソートされていない配列にリンクされたインデックスを取得する必要があります。問題は、ソートされていない配列に重複したエントリが含まれている場合、つまり[1,1,1,2,2,]、これらのエントリのインデックスが同じであるということです。例[3,5,5,3,3,]では、インデックスは[0,1,1,0,0]. しかし、次の index を取得する必要があります[0,3,4,1,2]。これを行う方法?

ArrayList<Double> nfit = new ArrayList<Double>();
ArrayList<Double> nfit_copy = new ArrayList<Double>(nfit);

// Fill nfit

Collections.sort(nfit);

int[] ind = new int[nfit.size()];

for (int n = 0; n < nfit.size(); n++){
    ind[n] = nfit_copy.indexOf(nfit.get(n));
}
4

3 に答える 3

1

これは、nfit_copy.indexOf(nfit.get(n)); 番号が重複している場合に同じインデックスを使用するためです。

例えば

[3,5,5,3,3,]-> : を使用するたびにnfit.indexOf(3)、インデックスが表示されます0

したがって、次の重複番号を取得できるように、この値を変更するか、null に設定する必要があるかもしれません (インデックスが変更されるため、削除しないでください)。

これを試して:

ArrayList<Integer> nfit = new ArrayList<Integer>();
ArrayList<Integer> nfit_copy = new ArrayList<Integer>(nfit);

// Fill nfit 

  nfit.add(3);
  nfit.add(5);
  nfit.add(5);
  nfit.add(3);
  nfit.add(3);


  nfit_copy = (ArrayList<Integer>) nfit.clone();


  Collections.sort(nfit);

  int[] ind = new int[nfit.size()];

  for (int n = 0; n < nfit.size(); n++) {
         ind[n] = nfit_copy.indexOf(nfit.get(n));
         nfit_copy.set(nfit_copy.indexOf(nfit.get(n)), null);
   }
   for (int i = 0; i < ind.length; i++) {
         int j = ind[i];
         System.out.println(j);
    }
于 2013-04-19T12:12:58.893 に答える