为IList定制OrderBy

时间:2014-02-17 10:26:42

标签: c#

我有 IList<string> ,并希望根据以下情况按此列表排序: 以“abs”开头的元素保持在顶部,其他元素将以正常方式排序为String.CompareTo

任何人都可以帮忙。

4 个答案:

答案 0 :(得分:2)

这个简单的代码:

stringArray.OrderBy(x => x.StartsWith("abs") ? 0: 1).ThenBy(x => x);

答案 1 :(得分:1)

您应该实现自定义IComparer并使用列表的Sort方法。

List<T>.Sort Method (IComparer<T>)

Example

答案 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);