我正在编写一个对 vector (一维数组)执行某些操作的方法。我想将它应用于矩阵的行和列(二维数组:行数组,每行都是一个数组)。我想知道最好的方法。
vector 方法可能需要额外的参数。例如,它可以实现排序算法(我的没有,但它足够复杂)。
现在,如果 matrix
是一个矩阵,并且我想使用第 4 行的方法,我只需将 matrix[3]
插入到该方法中,因此当方法访问a[n]
,最终将访问matrix[3][n]
。但将其应用到列上并不是那么简单,因为每当该方法访问 a[n]
时,我都希望它访问 matrix[n][7]
(在第 8 列的情况)。
我过去曾尝试应用 vector 方法来访问list[index[n]]
(list
和index
是 vector ) 每当该方法访问 a[n]
时。我当时用的是复制的方式(下面没有1)。
我想到的方法(没有优雅的):
创建一个 vector ,将列的内容复制到 vector 中,应用该方法,然后将 vector 的内容复制回矩阵的列(并处理 vector/重新使用它以应用于稍后再写一篇专栏)。
复制该方法,一个使用
a[n]
,其中a
是 vector 参数,另一个使用a[n] [m]
,其中a
是矩阵参数,m
是 int 参数。设计该方法,使其可以使用 vector 或矩阵列,但是每次访问元素时都允许两种情况,因此该方法的工作将会变得复杂。
<也许参数可以是函数
f
(无论如何实现),因此该方法使用f(n)
?然后,对于 vectorvector
,给出的f
使得f(n)
返回(对)vector[n]<的引用
。对于矩阵matrix
的行,f(n)
返回matrix[row][n]
,对于列f(n )
返回矩阵[n][列]
最佳答案
定义一个抽象(假设您的矩阵包含整数):
public interface IntVector {
public int size();
public int get(int index);
public void set(int index, int value);
}
更改您的算法,使其使用 IntVector 而不是数组。
然后定义两个实现:
public class RowVector implements IntVector {
private final int[] row;
public RowVector(int[] row) {
this.row = row;
}
@Override
public int size() {
return row.length;
}
@Override
public int get(int index) {
return row[index];
}
@Override
public void set(int index, int value) {
row[index] = value;
}
}
和
public class ColumnVector implements IntVector {
private final int[][] matrix;
private final int column;
public ColumnVector(int[][] matrix, int column) {
this.matrix = matrix;
this.column = column;
}
@Override
public int size() {
return matrix.length;
}
@Override
public int get(int index) {
return matrix[index][this.column];
}
@Override
public void set(int index, int value) {
matrix[index][this.column] = value;
}
}
关于Java - 在矩阵行或列上应用 vector 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53456381/