Unity C#和数组排序

时间:2017-11-25 13:23:24

标签: c# arrays sorting unity3d

所以我知道如何在php中对数组进行排序并保留密钥,但我在统一方面遇到了一些麻烦。

让我说我有一个阵列 itemcost = new int [10];

    itemcost[1] = 100;
    itemcost[2] = 300;
    itemcost[3] = 900;
    itemcost[4] = 300;
    itemcost[5] = 100;
    itemcost[6] = 300;

这种下降排序的最佳方法是什么,所以最高成本上升但保留数组键,以便我可以得到相应的def和att值?

提前致谢。

3 个答案:

答案 0 :(得分:2)

  

基于类属性或元素属性

对类/结构的通用列表或数组进行排序

创建一个类来保存成本及其索引然后排序此类的数组或列表

您可以为课程中的每个项目添加def,att,cost,name属性

这是示例

public class CostData
    {
        public int Cost;
        public int ID;
        public CostData(int CostAmount, int CostID)
        {
            Cost = CostAmount;
            ID = CostID;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        List<CostData> itemcost = new List<CostData> {
                                                    new CostData(100, 1),
                                                    new CostData(300, 2),
                                                    new CostData(900, 3),
                                                    new CostData(300, 4),
                                                    new CostData(100, 5),
                                                    new CostData(300, 6)
                                                   };

        List<CostData> SortedList = itemcost.OrderByDescending((CostData i) => i.Cost).ToList();

        Console.WriteLine(SortedList[0].Cost.ToString() + " on index " + SortedList[0].ID.ToString());

        // you can do same with Arrray

        CostData[] itemcost2 = new CostData[] {
                                                    new CostData(100, 1),
                                                    new CostData(300, 2),
                                                    new CostData(900, 3),
                                                    new CostData(300, 4),
                                                    new CostData(100, 5),
                                                    new CostData(300, 6)
                                                   };

        CostData[] SortedList2 = itemcost2.OrderByDescending((CostData i) => i.Cost).ToArray();

        Console.WriteLine(SortedList2[0].Cost.ToString() + " on index " + SortedList2[0].ID.ToString());
    }

答案 1 :(得分:1)

var result = Enumerable.Range(0, itemcost.Length)
              .OrderByDescending(index => itemcost[index])
              .ToList();

result.ForEach(index => Console.WriteLine(index + " : " + itemcost[index]));

将返回按顺序排序的项目成本索引列表。

请参阅here

答案 2 :(得分:1)

Array.Sort(Array keys, Array items)

  

keysArray中的每个键在itemsArray中都有一个对应的项目。在排序过程中重新定位键时,itemsArray中的相应项目同样会重新定位。因此,itemsArray根据keysArray中相应键的排列进行排序。

int[] indices = new int[itemcost.Length];

for (int i = 0; i < itemcost.Length; i++)
{
   indices[i] = i;
}

Array.Sort(itemcost, indices);