什么是基于逻辑条件过滤阵列的有效方法?

时间:2014-01-26 19:29:44

标签: java arrays search indexing runtime

假设我有一个3x6的双打数组:

double [] [] arr =

            [1.2, 1,  1]
            [4.3, 1 , 1]
            [2.0, 1 , 1]
            [2.9, 1 , 1]
            [6.2, 1 , 1]
            [2.5, 1 , 1]

我想基于 仅第一列 的公差x <3.0来返回数组。

这将返回完整数组减去与条件不匹配的行(x <3.0):

double [] [] returnArr =

               [1.2, 1,  1]                   
               [2.0, 1 , 1]
               [2.9, 1 , 1]                   
               [2.5, 1 , 1]

什么是实现这一目标的有效方法(运行时间是一个问题)???

1 个答案:

答案 0 :(得分:3)

由于您的数组未根据其[0]元素进行排序,因此 最有效的方法是O(N),即遍历所有的 数组(假设它们的数量是N)并测试它们的条件。

以下是一些示例代码。

import java.util.ArrayList;
import java.util.Arrays;

public class Test011 {

    private static double[][] arr = new double[][]{
        {1.2, 1,  1},
        {4.3, 1 , 1},
        {2.0, 1 , 1},
        {2.9, 1 , 1},
        {6.2, 1 , 1},
        {2.5, 1 , 1}
    };

    private static double[][] filter(double[][] d, double num){
        ArrayList<double[]> lst = new ArrayList<double[]>();

        for (int i=0; i<d.length; i++){
            if (d[i][0] < num){
                lst.add(d[i]);
            }
        }
        double[][] result = new double[lst.size()][];
        return lst.toArray(result);
    }

    public static void main(String[] args) {
        double[][] a = filter(arr, 3.0);
        System.out.println(Arrays.deepToString(arr));
        System.out.println(Arrays.deepToString(a));
    }

}