Question

Je suis en train de faire une boucle qui récursif par un tableau d'octets et de les comparer à la suivante dans le tableau (en utilisant probablement une boucle pour parcourir chaque entrée). Si les deux sont les mêmes que j'ai besoin pour incrémenter une variable int et puis continuer. Si les deux ne sont pas les mêmes, il faut ajouter la variable int à une liste, suivie par sa propre valeur d'octet, puis il a besoin « d'adopter » cette nouvelle valeur comme son propre et recommencer tout cela jusqu'à la fin du tableau. Son une chose très étrange, mais il doit se faire de cette façon que je puisse écrire les paires int / octet dans un fichier dans l'ordre et avec les bonnes valeurs.

Le problème est ici pour obtenir le nombre d'entrées consécutives qui sont les mêmes, notez, puis passer à la prochaine valeur et répéter. Si, par exemple la valeur 3 que nous rencontrons est la même que la valeur 1 qui est sans intérêt pour nous. Tant que nous obtenons le nombre d'entrées consécutives pour la valeur 3, nous avons fait notre travail.

Un autre couple de points peut-être utiles.

  • Les valeurs d'octets pourrait dans ce laps de cas, la gamme complète 0-255.
  • La taille du tableau peut être jusqu'à 150 millions d'entrées d'octets si l'efficacité est importante.
  • La taille du tableau est accessible au préalable.
  • Enfin, le tableau d'octets est une variable d'octets dans une structure.

J'espère que ce sens de faire. Merci à l'avance.

EDIT: Désolé si je comprends pas très bien avant et peut-être que je devrais re-titre la question ainsi.

Pour clarifier, je comprends ce que je dois faire ici tout simplement pas comment s'y prendre. Donc, la question que je suppose serait de savoir comment faire boucle I à cette comparaison et échanger sur ce que je compare quand je reçois une fausse déclaration. Plus important encore comment puis-je faire quand ce que je compare pourrait avoir 255 valeurs et je ne suis pas au courant. Je ne peux pas vraiment l'image comment coder ce donc je continue juste assis là à regarder VS:)

Est-ce que de sens mieux? Sinon, je présente mes excuses :)

EDIT 2: Voici le résultat final, je suis venu avec si soins de quelqu'un de le regarder. Il a été inspiré par le code aligray bas.

            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;
                }
            } 
Était-ce utile?

La solution

Si je comprends bien la question, nous espérons que cela vous permettra de démarrer:

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;
} 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top