微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为地图坐标实现 IEnumerator?

如何解决如何为地图坐标实现 IEnumerator?

在枚举地图上的所有图块位置时,我发现自己经常使用以下模式:

for (int y = (int) map.Rect.y; y < map.Rect.yMax; y++)
    {
        for (int x = (int) map.Rect.x; x < map.Rect.xMax; x++)
        {
            // do something with X and Y coordinates
        }
    }

我一直在研究 IEnumerator 和 IEnumerable,但我不知道如何将它们实现到 Map。

我想达到的目标:

foreach (Vector3Int position in Map)
    {
        DoSomething(position.x,position.y);
    }

然后 Map 可以使用这种更简单的语法在内部处理其余的逻辑。

解决方法

你可以yield他们:

public IEnumerable<Point> AllMapPoints()
{
    for (int y = (int) map.Rect.y; y < map.Rect.yMax; y++)
    {
        for (int x = (int) map.Rect.x; x < map.Rect.xMax; x++)
        {
            yield return new Point(x,y);
        }
    }
}

现在您可以将它们全部循环:

foreach (var point in AllMapPoints())
{
    DoSomething(point.X,point.Y);
}

或者只是一些,例如:

foreach (var point in AllMapPoints().Take(100))
{
    DoSomething(point.X,point.Y);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。