[VB.NET] Problema con lo spostamento di elementi in un array

martedì 22 marzo 2011 - 09.14
Tag Elenco Tags  C#  |  VB.NET  |  .NET 2.0  |  .NET 3.0  |  .NET 3.5  |  .NET 4.0  |  Windows 7  |  Windows Vista  |  Windows XP  |  Visual Studio 2010  |  Visual Studio 2008  |  Visual Studio 2005

drew Profilo | Newbie

Ciao,
Ho riscontrato difficoltà nello spostare elementi di un array secondo un determinato schema.
Ecco l'obiettivo del codice:

arrayi= {1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5}

Spostare elementi dell'array per ottenere questo:
arrayf= {1,2,3,4,5,5,1,2,3,4,4,5,1,2,3,3,4,5,1,2,2,3,4,5,1}

In pratica:

12345 12345
12345 51234
12345 -> 45123
12345 34512
12345 23451

Ovviamente questo è solo un esempio, il codice deve poter dare lo stesso risultato con un qualsialsi numero n di elementi dell'array(n quadrato perfetto). Ho provato molte volte, ma non sono ci sono riuscito.
Grazie in anticipo per qualsialsi aiuto.

niccord Profilo | Newbie

Conosci il numero di elementi dell'array (arrayi.Length) quindi conosci anche se è un quadrato perfetto e qual è la sua radice (Math.Sqrt).
Io suddividerei l'array principale in Math.Sqrt(arrayi.Length) array diversi (5 array di 5 elementi, nel tuo esempio) e in ognuno applicherei lo shift di x posizioni, con x che ogni volta si incrementa.

drew Profilo | Newbie

La tua soluzione è giusta, ma con un numero di elementi molto grande come 100000, dovrei creare circa 300 array, con un allocazione di memora troppo grande. Devo cercare di operare solo su di un array.

niccord Profilo | Newbie

Giusto. Usa due interi che identifichino la prima e l'ultima posizione in cui intendi agire e shifta i valori nell'array all'interno delle posizioni. Ad esempio:

int numeroSottoArray = Math.Sqrt(arrayi.Lentgh);
for (int i = 0; i < numeroSottoArray; i++)
{
int primaPos = numeroSottoArray * i;
int ultimaPos = (numeroSottoArray * (i + 1)) - 1;
shiftElementi(arrayi, primaPos, ultimaPos, i);
}

shiftElementi è la funzione che shifta (con riporto) gli elementi dell'array (i è il numero di spostamenti che bisogna fare nell'array)

drew Profilo | Newbie

Questa è la soluzione che cercavo, ma la funzione shiftElementi la devo creare io?

niccord Profilo | Newbie

Certamente

drew Profilo | Newbie

Va bene, grazie mille.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5