Android - 更原始的数组只按一个数组排序
Android - more primitive arrays sort by only one array
我没有找到任何解决方案,如何简单地对原始数组进行排序。
我有更多的原始数组:
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 项目保持相关。
例如结果应该是:
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而且还有错误,匿名class中的Compare(Double, Double)与java.util.comparator中的Compare(T,T)冲突。正在尝试使用不兼容的 return 类型。
出于某种原因,return 类型需要 int,而不是 double。
您应该创建一个 class 来封装上述数据。避免像您所做的那样创建并行数组,因为它们很难维护并且有时会出现问题。
因为上述数据是相关的,那么你应该为它创建一个模型,例如:
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());
}
);
然后您可以根据需要向模型添加更多属性,而不必担心并行数组提供的混乱。
我没有找到任何解决方案,如何简单地对原始数组进行排序。
我有更多的原始数组:
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 项目保持相关。
例如结果应该是:
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而且还有错误,匿名class中的Compare(Double, Double)与java.util.comparator中的Compare(T,T)冲突。正在尝试使用不兼容的 return 类型。
出于某种原因,return 类型需要 int,而不是 double。
您应该创建一个 class 来封装上述数据。避免像您所做的那样创建并行数组,因为它们很难维护并且有时会出现问题。
因为上述数据是相关的,那么你应该为它创建一个模型,例如:
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());
}
);
然后您可以根据需要向模型添加更多属性,而不必担心并行数组提供的混乱。