Domanda

Sto cercando di fare un ciclo che recurse attraverso un array di byte e confrontarle con quello successivo nella matrice (presumibilmente utilizzando un ciclo for per scorrere ogni voce). Se i due sono la stessa ho bisogno di incrementare una variabile int e poi continuare. Se i due non sono la stessa cosa di cui ha bisogno per aggiungere la variabile int a una lista seguito da un proprio valore di byte e quindi ha bisogno "adottare" questo nuovo valore come proprio e iniziare il tutto di nuovo fino alla fine della matrice. La sua una cosa molto strana, ma deve essere fatto in questo modo in modo da poter scrivere le coppie int / byte in un file nel giusto ordine e con i giusti valori.

La preoccupazione qui è quello di ottenere il numero di voci consecutive che sono gli stessi, prendere nota di esso, per poi passare al valore successivo e ripetere. Se per esempio il valore 3 che incontriamo è lo stesso valore di 1, che è motivo di preoccupazione per noi. Fino a quando si ottiene il numero di voci consecutive per il valore 3 che abbiamo fatto il nostro lavoro.

Un paio di altri punti forse utile.

  • I valori di byte potrebbe in questo caso lasso l'intera gamma 0-255.
  • La dimensione dell'array può essere fino a 150 milioni di voci di byte così l'efficienza è importante.
  • La dimensione dell'array è in anticipo accessibile.
  • Infine l'array di byte è una variabile di byte in una struttura.

spero che questo ha senso. Grazie in anticipo.

EDIT: Scusate se non era del tutto chiaro prima e forse dovrei ri-titolo la questione pure.

Per chiarire, ho capito cosa devo fare qui non solo come andare su di esso. Quindi la domanda immagino sarebbe come si fa ad anello che attraverso questo confronto e quindi scambiare ciò che sto paragonando quando ricevo un falso ritorno. Ancora più importante come posso fare che quando quello che sto confrontando potrebbe avere 255 valori e io non sono a conoscenza. Non posso davvero immagine come codice di questo modo che io continuo a lì seduto a guardare VS:)

Questo fa più senso? Se non mi scuso :)

EDIT 2: Ecco il risultato finale mi si avvicinò con se qualcuno avesse voglia di vedere le cose. E 'stato ispirato dal codice di aligray in basso.

            int count = 0;
            byte previous = tiles[0].TileTypeId;
            List<int> typeCount = new List<int>();
            List<byte> type = new List<byte>();
            for (int i = 0; i < worldSize; i++)
            {
                byte current = tiles[i].TileTypeId;
                if (previous == current)
                {
                    count++;
                }
                else
                {
                    typeCount.Add(count);
                    type.Add(previous);
                    previous = current;
                    count = 1;
                }
            } 
È stato utile?

Soluzione

Se ho capito correttamente alla domanda, spero che questo ti permetterà di cominciare:

int count = 0;
byte previous = byteArray[0];
List<int> list = new List<int>();

for (int i = 1; i < byteArray.Length; i++)
{
    byte current = byteArray[i];
    if (previous == current)
    {
        count++;
    }
    else
    {
        list.Add(count);
        list.Add(Convert.ToInt32(current));
    }

    previous = current;
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top