【问题标题】:Need help with logic on a weird loop在奇怪的循环上需要逻辑帮助
【发布时间】:2011-06-11 08:41:30
【问题描述】:

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

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

其他几个可能有用的点。

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

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

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

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

【问题讨论】:

  • 为什么要描述代码而不显示?让事情变得更容易......
  • 我迷失了“采用新价值作为自己的价值”。最好添加一个小的输入和输出样本。和/或到目前为止您的代码。
  • 对我来说听起来像是运行长度编码。

标签: c# loops logic run-length-encoding


【解决方案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;
} 

【讨论】:

  • "它需要将 int 变量添加到一个列表中,后跟它自己的字节值"。我想你忘了添加字节值。代码看起来还不错。
  • 非常感谢您的快速回答。我会将其标记为答案,因为它几乎正是我想要的。看到它后,我知道我现在需要怎么做。只需要一个视觉效果 :) 如果有人愿意看的话,我稍后会发布我的最终代码。唯一的一点是字节值需要在文件中存储一个字节。所以我想我要对列表 1 做 int 1 的字节,并且在写入文件时只是来回交替。再次感谢您的快速灵感。
  • 如果您愿意看一下,我在上面发布了结果。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
相关资源
最近更新 更多