gpt4 book ai didi

java - 排序后获取数组的索引?

转载 作者:IT老高 更新时间:2023-10-28 20:23:23 25 4
gpt4 key购买 nike

假设用户输入一个数组,例如:

Array = {France, Spain, France, France, Italy, Spain, Spain, Italy}

我确实知道它的长度

index 数组将是:

index = {0, 1, 2, 3, 4, 5, 6, 7}

现在,在使用 Arrays.sort(Array);

对其进行排序之后

newArray 会像:

newArray = {France, France, France, Italy, Italy, Spain, Spain, Spain}

newIndex 将是:

newIndex = {0, 2, 3, 4, 7, 1, 5, 6}

问题是:如何从输入数组中找到newIndex

提前致谢

最佳答案

不要对数组进行排序。对索引数组进行排序,传入一个比较器,该比较器使用数组中的 as 索引来比较值。所以你最终得到 newIndex 作为排序的结果,从那里到实际项目的排序数组是微不足道的。

诚然,这意味着以自定义方式对整数数组进行排序 - 这意味着使用 Integer[] 和标准 Java 库,或者具有“IntComparator”接口(interface)的第 3 方库可以与 sort(int[], IntComparator) 类型的方法结合使用。

编辑:好的,这是一个示例比较器。为简单起见,我假设您只想对“原始”字符串数组进行排序......我不会为空值测试而烦恼。

public class ArrayIndexComparator implements Comparator<Integer>
{
private final String[] array;

public ArrayIndexComparator(String[] array)
{
this.array = array;
}

public Integer[] createIndexArray()
{
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < array.length; i++)
{
indexes[i] = i; // Autoboxing
}
return indexes;
}

@Override
public int compare(Integer index1, Integer index2)
{
// Autounbox from Integer to int to use as array indexes
return array[index1].compareTo(array[index2]);
}
}

你会这样使用它:

String[] countries = { "France", "Spain", ... };
ArrayIndexComparator comparator = new ArrayIndexComparator(countries);
Integer[] indexes = comparator.createIndexArray();
Arrays.sort(indexes, comparator);
// Now the indexes are in appropriate order.

关于java - 排序后获取数组的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4859261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com