按位枚举的排序顺序

时间:2016-11-03 09:22:58

标签: sorting enums

是否有智能方法来识别按位枚举的顺序?

以此枚举为例:

[System.FlagsAttribute()]
internal enum AnswersSort : int
{
    None = 0,
    Bounty = 1,
    MarkedAnswer = 2,
    MostVotes = 4 
}

如果我以不同的方式结合这些:

var result = AnswersSort.MarkedAnswer | AnswersSort.MostVotes | AnswersSort.Bounty;
result = AnswersSort.MostVotes | AnswersSort.Bounty | AnswersSort.MarkedAnswer;

两个结果都是7,订单丢失。有没有办法在不使用数组或列表的情况下执行此操作?理想情况下,我正在寻找使用枚举的解决方案,但我不确定如何或是否可能。

1 个答案:

答案 0 :(得分:1)

如果您有10个值,则每个项目需要4位。您可以将组合视为单个40位值,每位数编码4位。所以,给出两个例子:

 0010 0100 0001
 ---- ---- ----
  |    |    - Bounty
  |    - MostVotes
  - MarkedAnswer

第一个将被编码为

long first = BuildValue(AnswersSort.MarkedAnswer, AnswersSort.MostVotes, AnswersSort.Bounty);

long BuildValue(params AnswersSort[] values)
{
    long result = 0;
    foreach (var val in values)
    {
        result = result << 4;
        result |= (int)val;
    }
    return result;
}

您可以使用64位整数构建它:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DQT_QML_DEBUG ")