private class MyComparer : IComparer<string>
{
[DllImport("Shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
public int Compare(string psz1, string psz2)
{
return -StrCmpLogicalW(psz1, psz2);
}
}
当我在返回行中添加减号时,它将从最后一项到第一个项对数组进行排序。如果没有减号,它将对数组进行排序,并保持从第一个到最后一个的顺序。
负号只是使排序也反转数组。
我想做一个bool,这样我就可以选择是否反转数组
用法:
Array.Sort(files, new MyComparer());
我希望能够通过设置true或false来决定是否要反转它,例如:
Array.Sort(filesRadar, new MyComparer(false));
如果为false则不反转,返回无负号;如果为true则添加负号。
可以将reverse
传递给构造函数:
private class MyComparer : IComparer<string>
{
// We may want to get rid of creation (see @aybe comment below)
public static readonly MyComparer Ascending = new MyComparer();
public static readonly MyComparer Descending = new MyComparer(false);
[DllImport("Shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
public int Compare(string psz1, string psz2)
{
return (Reverse ? -1 : 1) * StrCmpLogicalW(psz1, psz2);
}
public MyComparer(bool reverse) {
Reverse = reverse;
}
public MyComparer()
: MyComparer(false) {}
public bool Reverse {get; private set;}
}
然后你可以写
Array.Sort(filesRadar, new MyComparer(false));
或者
Array.Sort(filesRadar, MyComparer.Ascending);
试试这样:
bool SortArrayReversed = false;
if(SortArrayReversed == false)
{
Array.Sort(files);
}
else
{
Array.Sort(-files);
}
当你想改变数组的排序方式时,只需改变SortArrayReversed的值。