我有一个字符串列表,我希望按另一个字符串列表排序,如果列表中有不在比较器列表中的项目,我想要它们,因为它们位于列表的末尾.我怎样才能做到这一点?
所以,如果我有这个列表:List<string> {"A","T","G","F","V","E","W","Q" }
我有一个比较器:List<string> {"T","F","V","A" }
我希望结果是:List<string> {"T","F","V","A","G","E","W","Q" }
谢谢!
看起来你需要使用Intersect和Except喜欢:
List<string> originalList = new List<string> {"A", "T", "G", "F", "V", "E", "W", "Q"};
List<string> compareList = new List<string> {"T", "F", "V", "A"};
var intersectedItems = compareList.Intersect(originalList);
var notIntersectedItems = originalList.Except(compareList);
var resultList = intersectedItems.Concat(notIntersectedItems).ToList();
Run Code Online (Sandbox Code Playgroud)
你会得到:
resultList = T,F,V,A,G,E,W,Q
Run Code Online (Sandbox Code Playgroud)
如果它返回,您可以使用List<T>.IndexOf和使用:int.Maxvalue-1
List<string> result = list.OrderBy(str => {
int index = comparer.IndexOf(str);
return index == -1 ? int.MaxValue : index;
}).ToList();
Run Code Online (Sandbox Code Playgroud)
这是一个很长的版本,对某些人来说可能更具可读性.它也更灵活,因为您可以指定不包含项目的内容.例如,您可以按字典中加入命令他们ThenBy(x => x.String)面前Select(x => x.String):
List<string> result = list.Select(str => new
{
ComparerIndex = comparer.IndexOf(str),
String = str
})
.OrderBy(x => x.ComparerIndex == -1 ? 1 : 0) // not contained -> at the end
.ThenBy(x => x.ComparerIndex)
.Select(x => x.String)
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |