se ti va di leggere in c# ti posto una soluzione. non ho capito se ti serve una soluzione "algoritmica" o "pratica". Questa è piu algoritmica ma ha come limitazione quella di dover allocare un array sufficientemente grande per gestire i risultati in quanto gli array puri come ha detto Oregon non si possono dimensonare a runtime.
codice:
private static int[,] Riduci(int[,] originale, int[] indici)
{
int[,] ridotto = new int[10, 10]; //uno sufficientemente grande.
int count = 0;
for (int i = 0; i < originale.GetLength(0); i++)
for (int j = 0; j < originale.GetLength(1); j++)
if (!indici.Contains(i) && !indici.Contains(j))
{
int ri = count / (originale.GetLength(1) - indici.GetLength(0));
int rj = count % (originale.GetLength(1) - indici.GetLength(0));
ridotto[ri, rj] = originale[i, j];
count++;
}
return ridotto;
}
cosi la testi
codice:
int[,] originale = new int[5, 8];
//inizializzo sequenzialmente
for (int i = 0; i < originale.GetLength(0); i++)
{
for (int j = 0; j < originale.GetLength(1); j++)
{
originale[i, j] = (i * originale.GetLength(1)) + j;
Console.Write(originale[i, j] + " - ");
}
Console.WriteLine();
}
int[] indici = { 0, 2, 4 }; //elenco indici da eliminare
int[,] ridotto = Riduci(originale, indici);
//output
Console.WriteLine("Output matrice ridotta");
for (int i = 0; i < originale.GetLength(0) - indici.GetLength(0); i++)
{
for (int j = 0; j < originale.GetLength(1) - indici.GetLength(0); j++)
{
Console.Write(ridotto[i, j] + " - ");
}
Console.WriteLine();
}