我有 IList<string>
,并希望根据以下情况按此列表排序:
以“abs”开头的元素保持在顶部,其他元素将以正常方式排序为String.CompareTo
任何人都可以帮忙。
答案 0 :(得分:2)
这个简单的代码:
stringArray.OrderBy(x => x.StartsWith("abs") ? 0: 1).ThenBy(x => x);
答案 1 :(得分:1)
答案 2 :(得分:0)
尝试实现自定义Comparator
List<String> strings = new ArrayList<String>();
strings.add("abs");
strings.add("a");
strings.add("b");
strings.add("bb");
strings.add("ac");
strings.add("c");
Collections.sort(strings, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.equalsIgnoreCase("abs")) {
return -1;
} else if (o2.equalsIgnoreCase("abs")) {
return 1;
} else {
return o1.compareTo(o2);
}
}
});
更新我认为在标记更改之前这是Java
。不知道上面的代码是否有帮助
答案 3 :(得分:0)
var abs = list.Where(e = e.StartsWith("abs")).OrderBy(e => e);
var rest = list.Except(abs).OrderBy(e => e);
var result = abs.Concat(rest);