簡體   English   中英

通過ID對數組元素進行排序,並在Unity / C#中刪除特定的元素

[英]order Array elements by Id and remove specific ones in Unity / C#

我有一個數組,可以在游戲中存儲所有關卡。 該數組搜索所有級別,

  • 按其levelId排序
  • 刪除鎖定的級別

所以我去找這段代碼

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
}

有更好的方法訂購陣列並刪除鎖定的水平嗎?

您可以將thoose查詢合並為一個語句。

levels = FindObjectsOfType<Level>()
.Where(t=> t.IsUnlocked)
.OrderBy(currentLevel => currentLevel.Id)
.ToArray();

您可能應該將此壓縮為一個LINQ查詢表達式:

levels = (from level in FindObjectsOfType<Level>()
          orderby level.Id
          where level.IsUnlocked
          select level).ToArray();

這看起來更整潔,讀起來很自然。

如果您以前沒有遇到過這些查詢表達式,則可以在此處閱讀有關它們的信息

讓我們這樣說:我們想找到所有未鎖定的關卡並按ID排序,如果只需要幾個關卡,則無需對整個關卡進行排序。

還值得一提的是.ToArray()強制立即執行查詢評估並返回一個新數組。

您可能需要按照以下方式進行操作:

levels = 
     FindObjectsOfType<Level>()
     .Where(currentLevel => currentLevel.IsUnlocked)
     .OrderBy(currentLevel => currentLevel.Id)
     .ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM