在java(Android)中获取已排序数组的原始索引

时间:2012-01-04 16:00:14

标签: java android arrays sorting for-loop

在我的代码中,我得到一个要循环的元素列表并计算一些值,现在:

        double targetRatio = Math.min((double)w/h, (double)h/w);//height & width of the screen
        List<Size> sizes //populated with supported height and width
    double ratioArray[];
    int i;
    for (i = 0; i <= sizes.size(); i++) 
    {
        double ratio = Math.min((double)sizes.get(i).width/sizes.get(i).height, (double)sizes.get(i).height/sizes.get(i).width);
        ratioArray[i] = Math.abs(ratio - targetRatio);
        // Math.min((double)sizes.get(i).width/w, (double)w/sizes.get(i).width);
        // Math.min((double)h/sizes.get(i).height, (double)sizes.get(i).height/h);
        //sizes.get(i).width
        //sizes.get(i).height

    } 

ratioArray [i]中的值越低,我得到的比率越高;现在我被困在找到最佳比例,我可以这样做:

Arrays.sort(ratioArray);

但是我如何获得索引呢?我必须使最小值指向它的大小

2 个答案:

答案 0 :(得分:2)

最好的方法是迭代ratioArray,不要使用Arrays.sort(ratioArray);

double targetRatio = Math.min((double)w/h, (double)h/w);//height & width of the screen
        List<Size> sizes //populated with supported height and width
    double ratioArray[];
    int i;
    for (i = 0; i <= sizes.size(); i++) 
    {
        double ratio = Math.min((double)sizes.get(i).width/sizes.get(i).height, (double)sizes.get(i).height/sizes.get(i).width);
        ratioArray[i] = Math.abs(ratio - targetRatio);
        // Math.min((double)sizes.get(i).width/w, (double)w/sizes.get(i).width);
        // Math.min((double)h/sizes.get(i).height, (double)sizes.get(i).height/h);
        //sizes.get(i).width
        //sizes.get(i).height

    } 

在上面的代码之后,

        int min = ratioArray[0];
        int minindex;
        for (int i = 0; i < ratioArray.length; i++) {
            if(min > ratioArray[i]) {
 min = ratioArray[i];
                minindex = i;
            }
        }

你会得到你的minindex

答案 1 :(得分:1)

是否需要首先计算所有比率然后对它们进行排序? 我会计算for循环中的比率(正如你现在所做的那样),然后检查它是否优于迄今为止的最佳计算比率。如果是,则将它(及其索引)存储为bestRatio和bestRatioIndex并继续 - 如果不是,则转到下一个循环。 在循环之后,您在两个变量中具有最佳比率及其索引。 如果找到完全匹配的话,你甚至可以将循环留在中间。