奇妙なループのロジックについてサポートが必要です
-
26-10-2019 - |
質問
バイトの配列を介して再発し、配列の次のバイトと比較するループを作成しようとしています(おそらく、各エントリを繰り返すためにループを使用して使用します)。 2つが同じ場合、INT変数をインクリメントして続行するために必要です。 2つが同じではない場合は、int変数をリストに追加する必要があります。その後、独自のバイト値が続き、この新しい値を独自のものとして「採用」し、アレイの終了まですべてを再度開始する必要があります。それは非常に奇妙なことですが、この方法で行う必要があります。そうすれば、INT/バイトペアを適切な順序で正しい値でファイルに書き込むことができます。
ここでの懸念は、同じエントリの数を取得し、それをメモしてから、次の値に進んで繰り返すことです。たとえば、私たちが遭遇する値3が値1と同じである場合、私たちには関心のない。 Value 3の連続したエントリの数を取得している限り、私たちは仕事をしました。
他のいくつかのおそらく有用なポイント。
- この場合、バイト値は全範囲0-255に及ぶ可能性があります。
- アレイサイズは最大1億5000万バイトのエントリである可能性があるため、効率が重要です。
- アレイサイズに事前にアクセスできます。
- 最後に、バイト配列は構造体のバイト変数です。
これが理にかなっていることを願っています。前もって感謝します。
編集:申し訳ありませんが、以前は明確ではなかった場合は申し訳ありません。質問を再タイトする必要があります。
明確にするために、私はそれをどのように進めるかではなく、ここで何をする必要があるかを理解しています。ですから、私が推測する質問は、この比較をどのようにループして、誤った返品を得たときに比較しているものを交換する方法です。最も重要なことは、私が比較しているものが255の値を持っている可能性があり、それらを知らない場合、どのようにそれを行うことができますか。私はこれをコーディングする方法を本当に想像することができないので、私はそこに座ってVSを見つめ続けます:)
それはもっと理にかなっていますか?そうでない場合は謝罪:)
編集2:誰かがそれを見たいと思ったら私が思いついた最終結果です。以下のAligrayのコードに触発されました。
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;
}
}
解決
質問を正しく理解した場合、うまくいけば、これがあなたを始めさせるでしょう:
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;
}