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);
}
}
當我在回傳行中添加減號時,它將從最后一項到第一項對陣列進行排序。如果沒有減號,它將對陣列進行排序并保持從第一個到最后一個的順序。
減號只會使排序也反轉陣列。
我想以某種方式制作一個布林值,以便我可以選擇是否反轉陣列。
用法 :
Array.Sort(files, new MyComparer());
我希望能夠通過設定 true 或 false 來決定是否反轉它,例如:
Array.Sort(filesRadar, new MyComparer(false));
如果 false 不反轉它回傳沒有減號如果真加減號。
uj5u.com熱心網友回復:
你可以傳遞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);
uj5u.com熱心網友回復:
嘗試這樣的事情:
bool SortArrayReversed = false;
if(SortArrayReversed == false)
{
Array.Sort(files);
}
else
{
Array.Sort(-files);
}
當您想切換陣列的排序方式時,只需更改 SortArrayReversed 值即可。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/342656.html
