Есть матрица List<double[]>. Нужно удалить столбцы, которые не изменяются у каждой строки, например есть матрица:
0 1 2 3
1 1 3 3
3 1 4 3
4 1 2 3
Нужно удалить тут 2й и последний столбцы. Может можно это сделать нативными методами? Спасибо.
Если double[] - это строки, то, как вариант, можно преобразовать матрицу в
List < List < double > >:
static class Converter<T>
{
public static List<List<T>> ToListsOfLists(List<T[]> matrix) {
var result = new List<List<T>>();
for (var i = 0; i < matrix[0].Length; i++)
result.Add(new List<T>());
for (var i = 0; i < matrix.Count; i++)
for (int j = 0; j < matrix[0].Length; j++)
result[i].Add(matrix[j][i]);
return result;
}
}
А затем уже удалить нужные столбцы:
private static void DeleteEqualColumns(List<List<double>> matrix) {
var index = 0;
while (index < matrix.Count) {
var columnIsEqual = true;
var firstElementInColumn = matrix[index][0];
for (var i = 1; i < matrix[0].Count - 1; i++)
if (firstElementInColumn != matrix[index][i]) {
columnIsEqual = false;
break;
}
if (columnIsEqual)
matrix.Remove(matrix[index]);
index++;
}
}
Если double[] - это столбцы, то все достаточно просто, так как удалять столбцы можно, используя команду класса List.Remove(column);
private static void DeleteEqualColumns(List<double[]> matrix) {
var index = 0;
while (index < matrix.Count) {
var columnIsEqual = true;
var firstElementInColumn = matrix[index][0];
for (var i = 1; i < matrix[index].Length - 1; i++)
if (firstElementInColumn != matrix[index][i]) {
columnIsEqual = false;
break;
}
if (columnIsEqual)
matrix.Remove(matrix[index]);
index++;
}
}
Используется while, а не for, потому что когда удаляется столбец, Count у List изменяется, а переменная-счетчик i у for не изменяется, и неизбежен выход за пределы массива.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники