gpt4 book ai didi

c# - 比较枚举值进行排序

转载 作者:太空狗 更新时间:2023-10-30 00:32:38 27 4
gpt4 key购买 nike

在一个项目中,我有一个外部枚举(从服务引用生成)。所以我无法更改枚举值。

如何以有效的方式相互比较这些枚举值?

这里是一个枚举的例子

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com