繁体   English   中英

如何将数组操作“复制”到另一个数组?

[英]How to “copy” an array operation to another array?

这可能是一个简单的问题,但我有两个大约1000个元素的数组,它们被称为posXArrayposYArray 我想用数字排序posYArray (最低数字)但我希望posXArray的元素应用于它们相同的操作...

例如,如果posYArray element [56]是最小的,我希望posXArray元素[56]也被移动到[0]。

如何以简单/好的方式在Java中实现它?

非常感谢你的帮助!

由于数组似乎包含X和Y坐标,或许更好的选择是创建一个包含两个值的坐标类,实现Comparable并且只需要一个数组来使用内置算法进行排序?

创建一个类,如:

public class XYPos implements Comparable<XYPos> {
    int x;
    int y;

    @Override
    public int compareTo(XYPos o) {
        int res = this.y - o.y;
        if(res == 0) {
            res = this.x - o.x;
        }
        return res;
    }
}

然后:

  1. 将您的2个数组转换为一个XYPos数组
  2. 解决
  3. 使用排序数组中的值更新2个原始数组

创建一个相同长度的Integer[] idx并用数字0到999(或其他)填充它,然后使用比较器对该数组进行排序

public int compare(Integer a, Integer b) {
  return posYArray[a] - posYArray[b];
}

这将为您提供其他数组的索引数组,即最小的Y值将为posYArray[idx[0]] ,其对应的X将为posXArray[idx[0]]等。如果您不想维护间接,您可以通过idx值重新排序原始数组。

如果你经常做这类事情,你可能希望看一下fastutil ,它提供直接在原始类型(如int上运行的Collection和Comparator类型,避免使用box和unbox Integers。

您可以实现您选择的任何排序算法,仅对第一个(posXArray)进行比较检查,然后同时交换两个数组中元素的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM