我如何使用bool标志来决定是否在MyComparer类中使用反向?


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的值。

相关内容

  • 没有找到相关文章

最新更新