在一周中选择的几天中构建掩码(MTWTFSS,以查找特定日期是否仅通过基本运算符进行匹配

问题描述 投票:0回答:1

鉴于选择了星期几,我需要知道特定日期是否与选择匹配。

例如,给定:

enum DayOfWeek {
    MON, TUE, WED, THU, FRI, SAT, SUN
}

以及以下选择:

List<DayOfWeek> selection = List.of(MON, WED);

[如果给定的星期几是MONWED,则它应该匹配,否则不匹配。

一种简单的方法:

boolean match = selection.contains(day.getDayOfWeek());

我想知道是否有一种方法可以在选择范围之外构建掩码,并确定给定的日期是否仅与基本运算符(+ - * / % AND OR NOT EQ LT LTE GT GTE,不允许按位运算符)匹配。

例如,考虑到相同的选择:

int mask = 1010000; // just an example of a mask, can be any other

然后:

boolean match = fn(mask, day.getDayOfWeek());

是否存在这样的mask,使得fn只能用基本运算符写?


PS:不确定Stack Overflow是解决此问题的最佳网络,如果您认为它更适合,请毫不犹豫地提出另一个Stack Exchange网络。

algorithm mask dayofweek
1个回答
1
投票

代替布尔方法,取一些质数

MON, TUE, WED, THU, FRI, SAT, SUN
2,   3,   5,   7,   11,   13,  17

面具由所选日期的乘积组成,例如(MON, WED) -> 2*5 = 10

dayOfWeek匹配,如果它划分了掩码(同义mask % dayOfWeek === 0),则其匹配

例如

  • [TUE -> 3, mask % 3 != 0,不在选择中
  • MON -> 2, mask % 2 === 0,在选择中
© www.soinside.com 2019 - 2024. All rights reserved.