我正在尝试使用Array.Sort()
在Unity中按名称对数组进行排序。
我一直在阅读,但仍然无法适应这里的小项目。这是我到目前为止的内容:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
public class UIController : MonoBehaviour, IComparable<Slot>
{
public static UIController instance;
public Text uiMessageBox;
public Slot[] slots;
private void Awake()
{
if (instance == null)
instance = this;
else
Destroy(this);
DontDestroyOnLoad(this);
slots = FindObjectsOfType<Slot>();
Array.Sort(slots, ); // HELP: NOT SURE WHAT TO PUT HERE
}
public int CompareTo(Slot other)
{
return this.name.CompareTo(other.name);
}
}
注意,我删除了我认为与此类无关的部分(例如,在屏幕上显示消息字符串的代码等)。如果代码还不够,请告诉我,我将其全部发布。
也请注意:我在这里实现了IComparable<Slot>
,但我也尝试了IComparable<UIController>
的实现。 (就像我说的那样,我在这里和其他网站上看到了很多示例,但是不能完全在我的代码中使用它。)
答案 0 :(得分:2)
为什么不使用委托表格?
Array.Sort(slots, (slot1, slot2) => slot1.name.CompareTo(slot2.name));
如果您仍想实现IComparable接口,则必须在 Slot 类中编写它。
您还可以在任何类中实现IComparer接口。
class AnyClass : IComparer<Slot>
{
public int Compare(Slot slot1, Slot slot2)
{
return slot1.name.CompareTo(slot2.name);
}
}
答案 1 :(得分:1)
我能够将代码保留在UIController类中,这就是我的想象(因为我在那里建立了插槽数组,所以我也可以在那里对它进行排序)
操作方法如下:
public class UIController : MonoBehaviour, IComparer<Slot>
{
public static UIController instance;
public Text uiMessageBox;
public Slot[] slots;
private void Awake()
{
slots = FindObjectsOfType<Slot>();
Array.Sort(slots, this); // i just passed 'this' as the IComparer parameter :)
}
public int Compare(Slot x, Slot y)
{
return x.name.CompareTo(y.name);
}
}