Есть матрица 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 не изменяется, и неизбежен выход за пределы массива.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Использую библиотеку SharpGL в WPF приложении, как можно нарисовать линию с нужными размерами и отступами в пикселях? И как сделать так, чтобы...
Подскажите,пожалуйста, как сделать из числа integer массив, элементами которого будут цифры каждого разряда данного числа в C#? (Число нам нада...