我有一个数组存储游戏中的所有关卡。此数组搜索所有级别和
所以我去找这个代码
private Level[] levels;
private void Start()
{
levels = FindObjectsOfType<Level>(); // find all levels
levels = levels.OrderBy(currentLevel => currentLevel.Id).ToArray(); // order the array by levelId
levels = levels.Where(currentLevel => currentLevel.IsUnlocked).ToArray(); // remove the locked levels from the array
}
有没有更好的方法来订购数组并删除锁定的级别?
答案 0 :(得分:3)
您可以将thoose查询合并到一个语句中。
levels = FindObjectsOfType<Level>()
.Where(t=> t.IsUnlocked)
.OrderBy(currentLevel => currentLevel.Id)
.ToArray();
答案 1 :(得分:1)
您应该将其压缩为单个LINQ查询表达式:
levels = (from level in FindObjectsOfType<Level>()
orderby level.Id
where level.IsUnlocked
select level).ToArray();
这看起来更整洁,读起来非常自然。
如果您之前没有遇到过这些查询表达式,可以阅读它们here。
答案 2 :(得分:1)
让我们这样说吧: 我们希望找到所有解锁的级别并按 Id 进行排序,如果我们可能只需要其中几个级别,则无需对整个级别进行排序。
还值得一提的是.ToArray()
强制立即进行查询评估并返回一个新数组。
您可能希望按照以下方式执行以下操作:
levels =
FindObjectsOfType<Level>()
.Where(currentLevel => currentLevel.IsUnlocked)
.OrderBy(currentLevel => currentLevel.Id)
.ToArray();