按整数列表排序对象列表

时间:2015-07-20 09:23:41

标签: c# vb.net

我有一个整数列表(它被称为L1):{14,16,12}

我有一个对象列表(L2):

{
    [name: 'a1', id: 5], 
    [name: 'a2', id: 16],
    [name: 'a2', id: 8],
    [name: 'a2', id: 14]
}

我想按照L1的顺序订购L2。

我试过了:

L2.OrderBy(Function(o) L1.IndexOf(o.id)).ToArray()

但我得到了:

{
    [name: 'a1', id: 5],
    [name: 'a2', id: 8],
    [name: 'a2', id: 14],       
    [name: 'a2', id: 16]
}

这是因为在L1中找不到5和8,这就是indexOf返回-1的原因。

如何按列表对其进行排序,并保留L2中以L1在同一顺序中找不到的其他项目?

更新 输出应该是: 14, 16, 5, 8

步骤:

step 1)

L1 -> first number is 14.
put 14 in the top:

14, 5, 16, 8. 

step 2)

L1 -> second number is 16.
put 16 in the top (after 14):

14, 16, 5, 8. 

step 3)
L1 -> third number is 12.
12 is not found in L2.

So the output is: 14, 16, 5, 8.

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

如果所有其他人都在改变他们的位置,我不确定您希望如何保留订购。但是,也许你的意思是使用旧索引作为后备值:

{{1}}

因此,这导致一个稳定的顺序,其中id不在id-list中的所有对象与id不在该列表中的其他对象相比保持其位置。