如何实现2D列表?

时间:2013-05-15 07:04:21

标签: java arrays list arraylist

我有一个包含r行和c列的矩阵。我将矩阵存储在二维数组中。见下图。

enter image description here

我找到每行的最小数量。如果最小数字位于第一列,则将最小值添加到listC1。

考虑上图。

在第一行R1的最小数量为2,它位于C1列中我想在listC1中添加2。 在第二行R2中,最小数量为4,它位于列C3中我想在listC3中添加4。在第三行R3中,最小数量是5,它位于列C2中我想在listC2中添加5。简而言之,如果最小数字位于第一列,我将在第一列listC1中添加最小数字,如果最小数字位于第二列,我将在第二列listC2中添加最小数字,如果最小数字位于第三列我将在第三个列表listC3中添加最小数字,依此类推。

现在我面临的问题是如何创建列表列表来实现上述逻辑。我已经开发了一些代码(见下文),但它没有正常工作。请帮助我这方面

Note:  Ther number of columns may vary from 3 to 30



final float[][] matrix = {
            {2f, 8f, 5f},
            {9f, 7f, 4f},
            {8f, 5f, 6f},
            {7f, 3f, 9f},
            {1f, 5f, 5f},
            {8f, 7f, 5f},
        };

        Map<Integer, ArrayList<Float>> minsMap = new LinkedHashMap<>();



        for(int row=0; row < matrix.length; row++)
        {
            float min = Float.MAX_VALUE;
            int mc = 0;

            for(int col=0; col < matrix[row].length; col++)
            {
                if(matrix[row][col] < min) 
                {
                    min = matrix[row][col];
                    mc = col;
                }

                ArrayList<Float> minList = minsMap.get(mc);

                if(minList == null) 
                {
                    minList = new ArrayList<>();
                    minsMap.put(mc, minList);
                }
                minList.add(min);
            }

        }

        for(java.util.Map.Entry<Integer, ArrayList<Float>> e : minsMap.entrySet()) 
        {
            System.out.println("Min values in column " + e.getKey() + ": " + e.getValue());
        }

1 个答案:

答案 0 :(得分:0)

nestedGroup仅在a用于所有列时初始化。这不正确,每列需要一个嵌套组。

看看这段代码,它使用Map来保存最小值列表。

private final static float[][] matrix = {
    {2f, 8f, 5f},
    {9f, 7f, 4f},
    {8f, 5f, 6f},
    {7f, 3f, 9f},
    {1f, 5f, 5f},
    {8f, 7f, 5f},
};


@Test
public void minOfMatrixColumn() {
    Map<Integer, List<Float>> minsMap = new LinkedHashMap<>();
    for(int r = 0; r < matrix.length; r++) {
        float min = Float.MAX_VALUE;
        int mc = 0;
        for(int c = 0; c < matrix[r].length; c++) {
            if(matrix[r][c] < min) {
                min = matrix[r][c];
                mc = c;
            }
        }
        List<Float> minList = minsMap.get(mc);
        if(minList == null) {
            minList = new ArrayList<>();
            minsMap.put(mc, minList);
        }
        minList.add(min);
    }
    for(Entry<Integer, List<Float>> e : minsMap.entrySet()) {
        System.out.println("Min values in column " + e.getKey() + ": " + e.getValue());
    }
}

<强>输出

Min values in column 0: [2.0, 1.0]
Min values in column 2: [4.0, 5.0]
Min values in column 1: [5.0, 3.0]

请注意,列表不按列索引排序。