从任何地方开始对小部件进行排序和迭代

时间:2012-10-11 18:46:40

标签: c#

List<Widget> list = List<Widget>();
Widget widgetA = new Widget();
Widget widgetB = new Widget();
Widget widgetC = new Widget();
Widget widgetD = new Widget();
Widget widgetE = new Widget();
Widget widgetF = new Widget();
list.AddRange(new[] { widgetA, widgetB, widgetC, widgetD, widgetE, widgetF });

我需要做些什么才能从中间的某个位置开始排序?

例如,

list.AddRange(new[] { widgetD, widgetE, widgetF, widgetA, widgetB, widgetC });

或者换句话说,在中间某处开始索引,然后按顺序包装剩余的对象。

2 个答案:

答案 0 :(得分:2)

您可以使用SkipTakeUnion的组合。

List<Widget> widgets = ...

// now to split and wrap
int startIndex = 3;
var newList = widgets.Skip(startIndex)
                     .Union(widgets.Take(startIndex)
                     .ToList();

答案 1 :(得分:1)

首先对它们进行排序,然后将前几个元素放在最后。

var mid = 2; // starting point
var arr = new[] { widgetA, widgetB, widgetC, widgetD, widgetE, widgetF };
arr.Sort(); //you can use your own comparator for sorting
list.AddRange(arr.Skip(mid).Concat(arr.Take(mid)));