string[] listOne = new string[] { "dog", "cat", "car", "apple"};
string[] listTwo = new string[] { "car", "apple"};
必要なのはlistOne
、(存在する場合)のアイテムの順序で注文することlistTwo
です。したがって、新しいリストは次の順序になります。
「車」「りんご」「犬」「猫」
これは機能しますが、もっとうまくできると感じています:
var result=
from item in listOne
let existsInListTwo=listTwo.Contains(item)
let positionInListTwo=Array.IndexOf(listTwo, item)
orderby !existsInListTwo, positionInListTwo
select new {
Item=item,
position=positionInListTwo,
exists=existsInListTwo
};
編集:これとDamithのアプローチを組み合わせて使用すると、これはもう少し読みやすくなります:
var result=
listOne.OrderBy(i => !listTwo.Contains(i))
.ThenBy(i => Array.IndexOf(listTwo, i))
.ToList();