代码之家  ›  专栏  ›  技术社区  ›  Darksymphony

Android-更多基本数组仅按一个数组排序

  •  2
  • Darksymphony  · 技术社区  · 8 年前

    我没有找到任何解决方案,如何简单地对基元数组排序。

    我有更多的基本数组:

    public static String [] arr1={"name1","name2","name3"};
    public static Double [] arr2={45.07,46.06,42.07};
    public static Double [] arr3={183.95,192.94,182.94};
    

    我唯一想做的就是根据 arr3 ,因此其他数据将与arr3项目保持关联。

    E、 g.结果应为:

    1/ 182.94 name3 42.07
    2/ 183.95 name1 45.07
    3/ 192.94 name2 46.06
    

    所以只需按arr3升序排序,保留其他相关项。

    我尝试了更多的解决方案,但没有任何效果。我在这里也找到了一些解决方案,但没有一个解决方案可以同时处理更多的阵列,最多2个。

    如果我只使用这个:

      Arrays.sort(arr3);
    

    然后它将只对arr3中的项目进行排序,但其他数组中的其他项目不适合。

    然后我试着用这个:

      Arrays.sort(arr1, new Comparator<Double>() {
                public Double compare( Double o1,  Double o2) {
                    return Double.compare(arr3[o1], arr3[o2]);
                }
            });
    

    但只有arr1,而且匿名类中的Compare(Double,Double)与java中的Compare(T,T)发生冲突。util。比较器。试图使用不兼容的返回类型。

    出于某种原因,返回类型需要int,而不是double。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Ousmane D.    8 年前

    您应该创建一个类来封装所述数据。避免像以前那样创建并行阵列,因为它们很难维护,有时可能会出现问题。

    由于上述数据是相关的,因此您应该为其创建一个模型,例如:

    class ClassName { // I'll let you provide a more meaningful name
        private String name;
        private double latitude;
        private double distance;
    
        public String getName() {
            return name;
        }
    
        public double getLatitude() {
            return latitude;
        }
    
        public double getDistance() {
            return distance;
        }
    
        public ClassName(String name, double latitude, double distance) {
            this.name = name;
            this.latitude = latitude;
            this.distance = distance;
        }
    }
    

    现在,旋转任意多个需要填充的对象 name , latitude distance 然后将其存储到如下数组中:

    ClassName[] myArray = new ClassName[]{
          new ClassName("name1",45.07, 183.95),
          new ClassName("name2",46.06, 192.94)
    };
    

    然后,按距离或任何其他属性排序变得非常简单:

    Arrays.sort(myArray, new Comparator<ClassName>() {
          @Override
          public int compare(ClassName o1, ClassName o2) {
               return Double.compare(o1.getDistance(), o2.getDistance());
          }
    );
    

    然后,您可以根据需要向模型添加更多属性,而无需使用并行阵列提供的混乱。