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)
有人能给我一个暗示......?
为了获得更好的性能和设计,我建议您使用:
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));