作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在一个项目中,我有一个外部枚举(从服务引用生成)。所以我无法更改枚举值。
如何以有效的方式相互比较这些枚举值?
这里是一个枚举的例子
public enum Values
{
A,
B,
C,
D,
E,
F,
G,
H
}
而且我想要的排序顺序不一样(类似于 F、H、A、C、B、...)
现在我有一个带有一些比较的扩展方法。(有另一个我想要的顺序的枚举)
public static int CompareTo(this Values x, Values y)
{
var orderedX = GetOrderedValues(x);
var orderedY = GetOrderedValues(y);
return orderedX.CompareTo(orderedY);
}
internal enum ValuesOrdered
{
F = 0,
H = 1,
C = 2,
D = 3,
B = 4,
A = 5,
E = 6,
G = 7
}
internal static ValuesOrdered GetOrderedValues(this Values x)
{
switch (x)
{
case Values.A:
{
return ValuesOrdered.A;
}
// and so on...
}
}
这可以更有效地实现吗?
最佳答案
我相信最简单的方法是以这种方式实现您的比较功能:
public static int CompareTo(this Values x, Values y)
{
var sortOrder = new[] {
Values.F,
Values.H,
Values.C,
Values.D,
Values.B,
Values.A,
Values.E,
Values.G
};
return Array.IndexOf(sortOrder, x) - Array.IndexOf(sortOrder, y);
}
当然,您可能希望将 sortOrder
的初始化移动到函数外部,以便它只运行一次。
关于选择数组作为编码所需顺序的数据结构:它不仅是最简单的,而且对于如此少量的项目,线性搜索可能也是最快的。
关于c# - 比较枚举值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16517749/
我是一名优秀的程序员,十分优秀!