我從列表中創建了一個矩陣。我如何刪除'i'列和'i'列?有沒有一種方法呢?我試過RemoveAt
,但是會刪除一個項目。從列表中刪除行和列c#
List<List<int>> mtx = new List<List<int>>();
0 1 2 3
-------
0|0 0 0 0
1|0 0 0 0
2|0 0 0 0
3|0 0 0 0
比如我想刪除行i = 2
我從列表中創建了一個矩陣。我如何刪除'i'列和'i'列?有沒有一種方法呢?我試過RemoveAt
,但是會刪除一個項目。從列表中刪除行和列c#
List<List<int>> mtx = new List<List<int>>();
0 1 2 3
-------
0|0 0 0 0
1|0 0 0 0
2|0 0 0 0
3|0 0 0 0
比如我想刪除行i = 2
你要做的它在2次。
首先刪除第一維。 (我更喜歡談論的尺寸比列/行可被誤解)
mtx.removeAt(i);
然後在第一維迭代,以消除第二維的元素。
foreach(List<int> list in mtx){
list.removeAt(i);
}
要刪除i
行:
mtx.RemoveAt(i);
刪除列j
:
foreach (var row in mtx)
{
row.RemoveAt(j);
}
Cuong Le和Florian F.給出的答案是正確的;但我建議你創建一個矩陣類
public class Matrix : List<List<int>>
{
public void RemoveRow(int i)
{
RemoveAt(i);
}
public void RemoveColumn(int i)
{
foreach (List<int> row in this) {
row.RemoveAt(i);
}
}
public void Remove(int i, int j)
{
RemoveRow(i);
RemoveColumn(j);
}
// You can add other things like an indexer with two indexes
public int this[int i, int j]
{
get { return this[i][j]; }
set { this[i][j] = value; }
}
}
這使得使用矩陣更容易。更好的方法是隱藏實現(即,它不會在內部使用列表的矩陣類之外顯示)。
public class Matrix
{
private List<List<int>> _internalMatrix;
public Matrix(int m, int n)
{
_internalMatrix = new List<List<int>(m);
for (int i = 0; i < m; i++) {
_internalMatrix[i] = new List<int>(n);
for (int j = 0; j < n; j++) {
_internalMatrix[i].Add(0);
}
}
}
...
}
這使得您可以更輕鬆地在以後完成更改,例如,您可以通過數組替換列表,而不會損害矩陣的「用戶」。
如果您有Matrix類,您甚至可以重載數學運算符以使用矩陣。請參閱本教程overloading operators。
我建議使用數組而不是列表的列表來製作矩陣。 – podiluska