【发布时间】:2013-05-15 07:04:21
【问题描述】:
我有一个包含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());
}
【问题讨论】:
-
你的意思是“它不能正常工作”?它具体做什么/不做什么?
-
你可以先初始化并添加所有空的嵌套组,然后使用
group.get(atIndex).add(minValue); -
你可以看看 Guava 的Table
-
@user1703737 从地图中获取列表并向其添加最小值的代码需要在循环
for(int row=0; row < matrix.length; row++)之外,即将该循环的右大括号移动到ArrayList<Float> minList = minsMap.get(mc);上方然后它会工作。
标签: java arrays list arraylist