如果您将自己的偏好放入列表中,可能会变得更容易。
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
and data
.
IEnumerable<String> orderedData = data.OrderBy(
item => preferences.Concat(data).ToList().IndexOf(item));
我不喜欢Concat()
and ToList()
在那里。但目前我还没有什么好的办法来解决这个问题。我正在寻找一个很好的技巧来扭转-1
将第一个例子变成一个大数。