我有一个包含r
行和c
列的矩阵。我将矩阵存储在二维数组中。见下图。
我找到每行的最小数量。如果最小数字位于第一列,则将最小值添加到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());
}
答案 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]
请注意,列表不按列索引排序。