【发布时间】:2016-03-29 14:32:20
【问题描述】:
我有一个List 并且我有一个新订单,其中List 应该有int[] 中的项目我希望List 中的项目应该按照@987654327 中的项目重新排序@。这是我的代码:
class Program
{
static void Main(string[] args)
{
List<Test> tests = new List<Test>() {
new Test(){ No = 201 },
new Test(){ No = 101 },
new Test(){ No = 300 },
new Test(){ No = 401 },
new Test(){ No = 500 },
new Test(){ No = 601 }
};
int[] newOrder = new int[6] { 201, 401, 300, 101, 601, 500 };
//after the opration the List should contain items in order 201, 401, 300, 101, 601, 500
List<Test> newTests = new List<Test>();
foreach(var order in newOrder)
{
var item = tests.SingleOrDefault(t => t.No == order);
if (item != null)
newTests.Add(item);
}
}
}
这很好用。但它会创建一个单独的List 并对其执行操作。有没有更好的方法可以内置在.Net 操作中,或者可以在相同的List 上执行操作而不创建这些Temp List 等?
谢谢。
【问题讨论】:
-
如果你想在同一个列表中做,那么根据顺序数组的索引开始交换原始列表中的元素。不会有默认机制
-
您可以将您的阵列与您的列表联合起来,然后
Select没有排序。 -
@Unknown User 那不行,因为我们需要一个特定的比较逻辑来创建一个IComparer,这里好像没有这个系统
-
@MrinalKamboj 我认为交集可以解决问题。