1

我正在尝试创建一个循环,该循环将通过一个字节数组递归并将它们与数组中的下一个字节进行比较(大概使用 for 循环遍历每个条目)。如果两者相同,我需要它来增加一个 int 变量然后继续。如果两者不相同,则需要将 int 变量添加到列表中,后跟其自己的字节值,然后需要“采用”这个新值作为自己的值,并重新开始整个过程​​,直到数组结束。这是一件非常奇怪的事情,但需要以这种方式完成,这样我才能以正确的顺序和正确的值将 int/byte 对写入文件。

这里关心的是获取相同的连续条目的数量,记下它,然后转到下一个值并重复。例如,如果我们遇到的值 3 与我们无关的值 1 相同。只要我们得到值 3 的连续条目数,我们就完成了我们的工作。

其他几个可能有用的点。

  • 在这种情况下,字节值可以跨越 0-255 的整个范围。
  • 数组大小可能高达 1.5 亿字节条目,因此效率很重要。
  • 可以预先访问数组大小。
  • 最后,字节数组是 Struct 中的字节变量。

我希望这是有道理的。提前致谢。

编辑:对不起,如果我之前不太清楚,也许我也应该重新命名这个问题。

为了澄清,我明白我需要在这里做什么,而不是如何去做。所以我想的问题是我如何循环这个比较,然后当我得到一个错误的回报时换掉我正在比较的东西。最重要的是,当我比较的可能有 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;
                }
            } 
4

1 回答 1

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;
} 
于 2011-06-11T08:50:26.947 回答