2015-10-07 6 views
-2

Надеюсь, что название не слишком вводит в заблуждение. У меня есть два массива, например:Сортируйте массив и примените изменения положения к другому массиву

[9, 2, 5, 6, 3] 
[1.0, 7.0, 4.0, 9.0, 8.0] 

Прежде всего, я хочу сортировать первый массив по возрастанию. Затем я хотел бы применить изменения позиции ко второму массиву, независимо от того, правильно ли выполняется сортировка второго массива.

Так применяется для данного примера результат будет:

[2, 3, 5, 6, 9] 
[7.0, 8.0, 4.0, 9.0, 1.0] 

В качестве альтернативы он может быть также список вместо массива. Может кто-нибудь помочь?

+2

Да, мы можем. что ты уже испробовал? – StephaneM

+0

См. Http://stackoverflow.com/questions/12164795/how-to-sort-multiple-arrays-in-java для одного метода. – jarmod

+0

@John Вы можете просто сортировать оба вместе со вторыми свопами массива после первого. – user3437460

ответ

0

Вы должны отслеживать показатели. Самый простой способ сделать это - сортировать индексы, а не значения, но используя значения первого массива для сравнения, затем примените порядок индексов ко второму массиву.

С Java 8, вы можете сделать это следующим образом:

int[] iArray={9, 2, 5, 6, 3}; 
double[] dArray={1.0, 7.0, 4.0, 9.0, 8.0}; 

double[] result= 
    // original indices: ascending numbers from 0 to array length 
    IntStream.range(0, iArray.length) 
    // sort using the values of the first array 
    .boxed().sorted(Comparator.comparingInt(ix->iArray[ix])) 
    // apply to the values of the second array 
    .mapToDouble(ix->dArray[ix]) 
    // create a result array 
    .toArray(); 
System.out.println(Arrays.toString(result)); 

Для 8 раствора до Java, вы можете посмотреть here.

0

Я бы создать Bean, чтобы держать оба значения

public static class MyBean { 
    int i; 
    double d; 

    // constructor 
} 

и компаратор

static final Comparator<MyBean> COMPARATOR = new Comparator<MyBean>() { 
    public int compare(MyBean b1, MyBean b2) { 
     return new Integer(b1.i).compareTo(b2.i); 
    } 
} 

Тогда

MyBean[] beans = { 
    new MyBean(10, 2.1), 
    new MyBean(20, 2.2), 
    new MyBean(5, 1.3) 
}; 
Arrays.sort(beans, COMPARATOR); 
for (MyBean bean : MyBeans) { 
    // do whatever 
} 
Смежные вопросы