订购数组中的项目

时间:2014-02-25 16:24:09

标签: java android arrays

我正在尝试根据最短距离在地图上绘制多边形。

我创建了名为 distancearray 的数组列表。

但我想创建一个名为 shortdistance 的新数组列表,此数组列表必须在距离阵列中具有相同的值,但必须根据距离按照排序顺序进行短路。

任何人都可以帮我创建短距离数组。谢谢。

String array[][]=dbhand.collecting(getIntent().getExtras().getString("temple_type"), Integer.parseInt(getIntent().getExtras().getString("notemples")));

for(int i=0;i<array.length;i++){                
    displaymarkers(Double.parseDouble(array[i][0]), Double.parseDouble(array[i][1]), array[i][2]);
}

for(int i=0;i<array.length;i++){
    double Distance = calculate_distance(SEATTLE_LAT, SEATTLE_LNG, Double.parseDouble(array[i][0]), Double.parseDouble(array[i][1]));

    double[][] distancearray = new double[array.length][3];

    distancearray[i][0]=Double.parseDouble(array[i][0]);
    distancearray[i][1]=Double.parseDouble(array[i][1]);
    distancearray[i][2]=Distance;

}

double [][] shortdistance = new double [array.length][3];

绘制多边形函数

private void drawpolygon(String array[][]) {

    int lengh = array.length;
    if(lengh==2){
        mMap.addPolygon(new PolygonOptions()
        //.add(new LatLng(9.662502, 80.010239), new LatLng(9.670931, 80.013201), new LatLng(9.663216, 80.01333))
        .add(new LatLng(9.6632139, 80.0133258))
        .add(new LatLng(Double.parseDouble(array[0][0]), Double.parseDouble(array[0][1])))
        .add(new LatLng(Double.parseDouble(array[1][0]), Double.parseDouble(array[1][1])))
       .fillColor(Color.GRAY));
    }

2 个答案:

答案 0 :(得分:4)

只需针对您的阵列调用Arrays.sort()并指定一个查看距离的比较器。

答案 1 :(得分:1)

您将难以按原样对数组进行排序,因为您当前将数据存储在并行数组中:

        distancearray[i][0]=Double.parseDouble(array[i][0]);
        distancearray[i][1]=Double.parseDouble(array[i][2]);
        distancearray[i][3]=Distance;

您可以对distancearray[n]进行排序,但这会产生无意义的结果。相反,你应该做的是创建一个小类来实现Comparable(基于距离比较),它保存你的三个值,然后使用这些类的数组:

class DistanceInfo implements Comparable<DistanceInfo> {
    public double a;
    public double b;
    public double distance;
    public DistanceInfo (double a, double b, double distance) {
        this.a = a; 
        this.b = b;
        this.distance = distance;
    }
    @Override public int compareTo (DistanceInfo d) { 
        return Double.compare(distance, d.distance);
    }
}

// then:
DistanceInfo[] distancearray = new DistanceInfo[array.length];

// and you can load it using the constructor:
for (int i = 0; i < array.length) {
    double a = Double.parseDouble(array[i][0]);
    double b = Double.parseDouble(array[i][1]);
    distancearray[i] = new DistanceInfo(a, b, Distance);
}

(如果您希望指定在构建后无法修改字段,则可以将字段设为final。)

现在,Arrays.sort()将根据距离对distancearray进行排序:

Arrays.sort(distancearray, null);

您也可以使用ArrayList<DistanceInfo>代替,除了您使用Collections.sort()排序外,其他想法是相同的。

通常,由于这个原因(其中包括),通常最好使用类来存储有关对象的所有信息,而不是并行数组。

<小时/> 另外,您可能还需要考虑将此类用于array,它会稍微简化您的代码(您可以修改displaymarkers以获取DistanceInfo,您也可以避免多次解析同一个双精神。)