Android-更多的原始数组只按一个数组排序
我没有找到任何解决方案,如何简单地对基元数组排序 我有更多的基本数组:Android-更多的原始数组只按一个数组排序,android,arrays,sorting,primitive,Android,Arrays,Sorting,Primitive,我没有找到任何解决方案,如何简单地对基元数组排序 我有更多的基本数组: 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/
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]);
}
});
Arrays.sort(arr1,新的比较器(){
公共双比较(双o1,双o2){
返回Double.compare(arr3[o1],arr3[o2]);
}
});
但只有arr1存在,而且匿名类中的Compare(Double,Double)与java.util.comparator中的Compare(T,T)冲突时也有错误。试图使用不兼容的返回类型
由于某些原因,返回类型需要int,而不是double。您应该创建一个类来封装所述数据。避免像以前那样创建并行阵列,因为它们很难维护,有时可能会出现问题 因为上述数据是相关的,所以您应该为其创建一个模型,例如:
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;
}
}
现在,旋转任意多个需要填充必要的名称
、纬度
和距离的对象,然后将其存储到如下数组中:
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());
}
);
Arrays.sort(myArray,newcomparator(){
@凌驾
公共int比较(类名o1,类名o2){
返回Double.compare(o1.getDistance(),o2.getDistance());
}
);
然后,您可以根据需要向模型中添加更多属性,而无需使用并行数组提供的混乱数据进行强调。使用相关数据创建一个类,并按给定属性进行排序。您能更具体一点吗?arr2
代表什么和arr3
?这只是一个示例,实际上我有更多的数组。arr1是名称arr2是纬度,其他数组包含一个图像和经度。最后arr3是距离,所以我需要按arr3-距离进行排序。好的,我将提供一个解决方案来解释我的意思。啊,所以没有其他方法可以将数组类型转换为:新的类名(“name1”,45.07,183.95)?您的代码似乎正常工作,但我的输出仍然没有排序,因为我是通过:gv.setAdapter(新的CustomAdapter(getContext(),arr1,arr2,arr3))进行排序的;其中gv是我的GridView。@wotan我已经对它进行了测试,并对数组进行了排序。您可以做的是,在按照上述属性对ClassName
模型进行排序后,您可以从中提取所需的信息。例如,您可以通过执行String[]arr1=新字符串[myArray.length]来获取我的所有名称;例如(int i=0;i
获取所有纬度-->double[]arr2=new double[myArray.length];for(int i=0;i
获取所有距离-->double[]arr3=new double[myArray.length];对于(int i=0;i
@wotan如果需要,您可能希望将数组的类型更改为double
,而不是double
。