Linq:根据另一个列表对列表进行排序

时间:2016-04-01 09:59:59

标签: c# linq

我有一个字符串列表列表{“X”,“W”,“C”,“A”,“D”,“B”}我有另一个字符串列表列表{“A”,“B “,”C“,”D“}表示必须如何排序第一个列表。但第二个清单中只有四个项目。我希望我的第一个清单是这样订购的: A,B,C,D,X,W。实际上,最后两个字母X和W与它们的排序方式无关,但它们应该在列表的末尾。

我试过了:

var newList = list1.OrderBy(i=>list2.IndexOf(i));

但这只给了我四件物品。

3 个答案:

答案 0 :(得分:3)

与其他人一起走另一条路。

[2016-02-11 05:10:21,893][INFO ][monitor.jvm              ] [noeud-0] [gc][young][5554661][67] duration [790ms], collections [1]/[1s], total [790ms]/[1.9m], memory [320mb]->[320mb]/[1.9gb], all_pools {[young] [266.2mb]->[266.2mb]/[266.2mb]}{[survivor] [1.2mb]->[1.2mb]/[33.2mb]}{[old] [52.5mb]->[52.5mb]/[1.6gb]}
[2016-02-11 20:42:08,422][INFO ][monitor.jvm              ] [noeud-0] [gc][young][5610361][68] duration [808ms], collections [1]/[1.6s], total [808ms]/[1.9m], memory [319.8mb]->[56.7mb]/[1.9gb], all_pools {[young] [265.8mb]->[3.3mb]/[266.2mb]}{[survivor] [801.6kb]->[361.7kb]/[33.2mb]}{[old] [53.2mb]->[53.2mb]/[1.6gb]}

检查Demo

答案 1 :(得分:2)

您当前的代码将为您提供6个项目。但是,它会将X和W放在开头,因为它们在列表2中的索引为-1。

以下是解决这个问题的方法:

var list1 = new List<string> {"X", "W", "C", "A", "D", "B"};
var list2 = new List<string> {"A", "B", "C", "D"};

var newList = list1.OrderBy(x =>
{
    var index = list2.IndexOf(x);

    if (index == -1)
        index = Int32.MaxValue;

    return index;
})
.ToList();

答案 2 :(得分:1)

这应该有效:

  #myBootstrapContainer * {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
/* put every style which should be overwritten in here ...*/
}

结果(来自LinqPad):

linqpad result