Frage

Ich versuche eine Schleife zu machen, die durch eine Reihe von Bytes wiederholt und mit dem nächsten in der Array verglichen wird (vermutlich eine für die Schleife, um jeden Eintrag zu iterieren). Wenn die beiden gleich sind, muss ich eine INT -Variable erhöhen und dann fortfahren. Wenn die beiden nicht gleich sind, muss die INT -Variable zu einer Liste hinzufügen, gefolgt von ihrem eigenen Byte -Wert, und dann muss sie diesen neuen Wert als sein eigenes "übernehmen" und das Ganze bis zum Ende des Arrays erneut starten. Es ist eine sehr seltsame Sache, aber es muss auf diese Weise getan werden, damit ich die INT/Byte -Paare in eine Datei in der richtigen Reihenfolge und mit den richtigen Werten schreiben kann.

Das Problem besteht darin, die Anzahl der aufeinanderfolgenden Einträge zu erhalten, die gleich sind, sich davon zur Kenntnis nehmen, dann zum nächsten Wert übergehen und wiederholen. Wenn beispielsweise Wert 3, dem wir begegnen, mit Wert 1 entspricht, ist dies für uns nicht von Bedeutung. Solange wir die Anzahl der aufeinanderfolgenden Einträge für Wert 3 erhalten, haben wir unseren Job gemacht.

Ein paar andere möglicherweise hilfreiche Punkte.

  • Die Byte-Werte könnten in diesem Fall den gesamten Bereich von 0-255 überschreiten.
  • Die Array -Größe kann bis zu 150 Millionen Byte -Einträge betragen, daher ist die Effizienz wichtig.
  • Die Array -Größe ist vorher zugänglich.
  • Zuletzt ist das Byte -Array eine Byte -Variable in einer Struktur.

Ich hoffe das macht Sinn. Danke im Voraus.

EDIT: Entschuldigung, wenn ich vorher nicht ganz klar war und vielleicht auch die Frage wieder aufnehmen sollte.

Um zu verdeutlichen, verstehe ich, was ich hier tun muss, nur nicht, wie ich es machen soll. Die Frage, die ich denke, wäre also, wie ich diesen Vergleich durchschließe und dann auszutauschen, was ich vergleiche, wenn ich eine falsche Rendite bekomme. Am wichtigsten ist, wie ich das mache, wenn das, was ich vergleiche, 255 Werte haben könnte und ich sie nicht bewusst bin. Ich kann mir nicht wirklich vorstellen, wie man das codiert, also sitze ich immer wieder da und starrte Vs an :)

Ist das besser sinnvoll? Wenn nicht, entschuldige ich mich :)

EDIT 2: Hier ist das Endergebnis, das ich mir ausgedacht habe, wenn jemand sich ansehen möchte. Es wurde von Aligrays Code unten inspiriert.

            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;
                }
            } 
War es hilfreich?

Lösung

Wenn ich die Frage richtig verstanden habe, werden Sie hoffentlich den Einstieg erhält:

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;
} 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top