1

我构建了一个List <MyObject>具有特定顺序的对象集合,但在此列表中,我想管理一种 SORT 列,但由我自己创建。

我的意思是,例如我想手动枚举 10 个对象;2 前 7 个依次从 1 到 7,最后 3 个从 8 到 10 乘以 -1,所以最后我会得到我的列表

List[0] {1, obj1}
List[1] {2, obj2}
List[2] {3, obj3}
List[3] {4, obj4}
List[4] {5, obj5}
List[5] {6, obj6}
List[6] {7, obj7}
List[7] {-8, obj8}
List[8] {-9, obj9}
List[9] {-10, obj10}

然后最后我可以对它进行排序(升序),我会有-10, -9, -8, 1, 2, 3, 4, 5, 6, 7

有没有办法避免这么多循环并使用linq(我希望)以及我可以使用什么类型的列表来做到这一点?

编辑

我要做的是收集要保存在数据库中的对象,但它们需要按顺序排列(FK),但如果我认识到其中 3 个将被删除,它们必须以正确的顺序避免 FK 冲突。所以我认为这是最好的做法。建议?

4

3 回答 3

4

您可以使用列表中方便命名的Sort方法:

var list = new List<MyType>() { ... };
list.Sort((x, y) => x.Prop1.CompareTo(y.Prop1));

或者,如果这实际上不是一种List<T>,而是某种其他类型IEnumerable<T>,请改用 Linq 的OrderBy扩展方法:

var unordered = ...
var ordered = unordered.OrderBy(x => x.Prop1);
于 2013-11-08T19:23:46.023 回答
0

排序时,让您的数字列完全为正。

如果要使用 LINQ 扩展方法,请像这样使用 OrderBy:

var orderedList = list.OrderBy(i => Math.Abs(i.Number));
于 2013-11-08T20:37:59.547 回答
0

这里以 Lync 为例:

void Main()
{
    // Create the list
    var items = Enumerable.Range(1, 10)
                          .Select (index => new Holder {
                                               Name = "Info " + index,
                                               SortOrder = index
                                               }
                                  )
                          .ToList();

    //set sort order
    items.Skip(7)
         .ToList()
         .ForEach(itm => itm.SortOrder = itm.SortOrder * -1);

    // Now sort
    var sorted = items.OrderBy (itm => itm.SortOrder);

    sorted.Dump();

/* Output
Name SortOrder
Info 10 -10
Info 9 -9
Info 8 -8
Info 1 1
Info 2 2
Info 3 3
Info 4 4
Info 5 5
Info 6 6
Info 7 7
*/
}

// Define other methods and classes here

public class Holder
{
    public string Name   { get; set; }
    public int SortOrder { get; set; }
}
于 2013-11-08T19:33:45.943 回答