unity对list中的gameObject排序
在Unity开发中,有时我们需要对List中的GameObject进行排序。本文将通过一个具体示例,详细介绍如何对包含特定属性的对象列表进行排序。
定义数据类
首先,我们定义一个Player类,该类包含Name和Total两个属性变量,后续将针对这两个变量进行排序操作。以下是Player类的代码:
public class Player
{
public string Name { get; set; }
public int Total { get; set; }
public Player(string name, int total)
{
Name = name;
Total = total;
}
}
创建并初始化列表
接下来,我们创建一个List<Player>,并为其添加一些节点数据。这里添加了6条数据,代码如下:
List<Player> lst = new List<Player>();
lst.Add(new Player("John", 100));
lst.Add(new Player("Smith", 120));
lst.Add(new Player("Cait", 97));
lst.Add(new Player("Irene", 100));
lst.Add(new Player("Ben", 100));
lst.Add(new Player("Deniel", 88));
排序方法
1. 通过Total变量进行升序排序
使用List.Sort()方法结合委托,实现按Total变量升序排序。代码如下:
lst.Sort(delegate(Player x, Player y)
{
return x.Total.CompareTo(y.Total);
});
2. 通过Total变量进行降序排序
同样使用List.Sort()方法,调整委托中的比较逻辑,实现按Total变量降序排序。代码如下:
lst.Sort(delegate(Player x, Player y)
{
return y.Total.CompareTo(x.Total);
});
3. 通过多个元素进行排序
当需要根据多个元素进行排序时,我们可以先按Total降序排序,若Total相同,则按Name升序排序。代码如下:
lst.Sort(delegate(Player x, Player y)
{
// Sort by total in descending order
int a = y.Total.CompareTo(x.Total);
// Both player has the same total.
// Sort by name in ascending order
if (a == 0)
a = x.Name.CompareTo(y.Name);
return a;
});
4. 使用LINQ进行排序
LINQ(Language Integrated Query)提供了更简洁的排序方式。以下是几种使用LINQ进行排序的示例:
// 按Total升序排序
var result1 = lst.OrderBy(a => a.Total);
// 按Total升序排序,若Total相同则按Name升序排序
var result3 = lst.OrderBy(a => a.Total).ThenBy(a => a.Name);
// 按Total降序排序,若Total相同则按Name降序排序
var result2 = lst.OrderByDescending(a => a.Total).ThenByDescending(a => a.Name);
通过以上几种方法,我们可以根据不同的需求对List中的对象进行排序。在实际开发中,可根据具体场景选择合适的排序方式。