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

如何使用 Vector3 键对字典进行排序?

如何解决如何使用 Vector3 键对字典进行排序?

Scenario image

我正在重新创建游戏“边缘世界”中的边缘链接系统。

紫色方块是需要形成“链接”的单个方块,在绘制箭头的方向上,具有精确的长度。

目前,我不知道如何比将所有这些方块放在字典中更好地做到这一点,我在其中标记了方块的位置和方向(可以是向上或向右),如下所示:

Dictionary<Vector3Int,bool> linkSquares;

我想对这本字典进行排序,以便首先出现的 KV 对是 Vector3Int.x 最低的那些,然后是 Vector3Int.y 最低的那些。

那样,我总是可以从那些方块(在图片上标有数字 1-4)开始,然后沿着适当的箭头方向前进,边走边移除这些方块,这样只会留下其他起始方块。

我读过无法对字典进行排序,但我不知道如何在这种情况下使用 SortedDictionary。整个系统看起来过于肮脏,但我不知道我还能如何实现我的目标,因此非常感谢任何设计更改建议。

解决方法

您可以将 OrderBy 用作第一个键,将 ThenBy 用作第二个键 (Linq) 并将结果放入新字典中(已排序):

        var dictsorted= linkSquares.OrderBy(k => k.Key.x).ThenBy(k => k.Key.y).ToDictionary(k => k.Key,k=> k.Value);
,

尝试定义一个自定义类,其中包含 vector3 和 bool 以及来自该类的对象的 make 列表。然后,您可以根据需要对课程进行排序。

如果您只需要 bool 进行过滤,那么您可以将字典排序到列表中。将字典排序为列表的示例如下:

List<Vector3Int> productList = myDictionary.OrderBy(kp => kp.key.x).ThenBy(kp => kp.key.y)
                                      .ToList();

查看 thisthis 以获取更多示例代码。

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