根据字符串位置(C#)对字符串数组进行排序

ore*_*ren 5 c# arrays sorting string position

我想知道如何根据特定的字符串位置对字符串[]的项进行排序.例如,我想通过子串" - "对以下数组进行排序

输入:{xx - c,xxxxx - b,yyy - a,mlllll - d}

预期输出:{yyy - a,xxxxx - b,xx - c,mlllll - d}

到目前为止我所拥有的是以下内容:

public string[] SortByStringPos(string[] arr, string str, bool ascending)
{
    if (ascending)
    {
        var result = from s in arr
                     where s.Length >= s.IndexOf(str)
                     orderby s[s.IndexOf(str)] ascending
                     select s;

        return result.ToArray();
    }
    else
    {
        var result = from s in arr
                     where s.Length >= s.IndexOf(str)
                     orderby s[s.IndexOf(str)] descending
                     select s;

        return result.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

有人能给我一个暗示......?

LMB*_*LMB 3

为了获得更好的性能和设计,我建议您使用:

    public void SortByStringPos(string[] arr, string str, bool ascending)
    {
        Array.Sort(arr, new MyStrComparer("-", ascending));
    }

    class MyStrComparer : Comparer<string>
    {
        string delimiter;
        bool isAscending;

        public MyStrComparer(string aStr, bool ascending)
        {
            delimiter = aStr;
            isAscending = ascending;
        }

        public override int Compare(string x, string y)
        {
            var r = GetMySubstring(x).CompareTo(GetMySubstring(y));
            return isAscending ? r : -r;
        }

        string GetMySubstring(string str)
        {
            return str.IndexOf(delimiter) != -1 ? str.Substring(str.LastIndexOf(delimiter)) : string.Empty;
        }

    }
Run Code Online (Sandbox Code Playgroud)

您还可以从代码中的任何位置删除SortByStringPos方法和调用。Array.Sort(arr, new MyStrComparer("-", ascending));