好みをリストに入れておけば、もっと簡単になるかもしれません。
List<String> data = new List<String> { "A","B","A","C","B","C","D","E" };
List<String> preferences = new List<String> { "A","B","C" };
IEnumerable<String> orderedData = data.OrderBy(
item => preferences.IndexOf(item));
これにより、が返されるため、表示されていないすべての項目がpreferences
前面に表示されます。その場しのぎの回避策として、結果を逆にして降順で並べることができます。これはかなり醜くなりますが、機能します。IndexOf()
-1
preferences
IEnumerable<String> orderedData = data.OrderByDescending(
item => Enumerable.Reverse(preferences).ToList().IndexOf(item));
preferences
と を連結すると、ソリューションは少し良くなりますdata
。
IEnumerable<String> orderedData = data.OrderBy(
item => preferences.Concat(data).ToList().IndexOf(item));
Concat()
私は好きではありませんToList()
。しかし、今のところ、それを回避する良い方法はありません。-1
最初の例の を大きな数に変える素敵なトリックを探しています。