如何将列表对象移到列表末尾,同时又移回其他对象?

时间:2019-04-09 20:25:33

标签: c# arrays list sorting unity3d

首先,我必须说一整天都在寻找答案,然后再在此发布问题。我得到的最接近的答案是here,但是有些答案对我不起作用,而另一些答案太复杂了,我无法理解。 让我清楚地说明我要实现的目标:为简单起见,请考虑一下我有一个包含“ 6”个对象的列表。我在列表中随机选择一个索引,比如说myList [index = 2]。然后,我希望该对象位于列表的末尾,这意味着它的索引值现在为5。另外,我想重新排列未触及的对象,以得到相同大小的列表,而没有空的索引值。完成所有这些步骤后,它应该像这样:

ListOrder

目前我的代码是这样:

 public static void Move<T>(this List<T> list, int oldIndex, int newIndex)
 {
     if ((oldIndex == newIndex) || (0 > oldIndex) || (oldIndex >= list.Count) || (0 > newIndex) ||
         (newIndex >= list.Count)) return;
     // local variables
     var i = 0;
     T tmp = list[oldIndex];
     for (i = oldIndex+1; i < newIndex; i++)
     {
         list[i] = list[i - 1];
     }        
     list[newIndex] = tmp;
 }  

但是,您可以预测它不起作用。当我使用代码在列表中移动项目时,指向该列表中的gameobjects的Debug.DrawLine向我显示了我添加的两个对象:一个myList [0]和一个myList [5]。其他行之后消失。

1 个答案:

答案 0 :(得分:4)

您太想了。

var value = list[index];
list.RemoveAt(index);
list.Add(value);