跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 有没有解析集合表达式的轮子 例如:`(-∞, -600]∪[600, +∞)`
未分類
2020 年 5 月 18 日

有没有解析集合表达式的轮子 例如:`(-∞, -600]∪[600, +∞)`

有没有解析集合表达式的轮子 例如:`(-∞, -600]∪[600, +∞)`

資深大佬 : RRRoger 23

业务里有判断一个数是否在一个区间需求, 要求可以动态配置,

要是写成(-∞, -600]∪[600, +∞)这样,

对用户(理解集合的意义)会直白很多,

并且在数据库里保存一个 char 类型的字段就可以通用.

问: 有没有类似的轮子,最好技术栈是python.

大佬有話說 (16)

  • 資深大佬 : rrfeng

    没学过的很难理解吧?不要高估你的用户。

    建议直观一点:

    小于 xx 或者 大于 xx

  • 主 資深大佬 : RRRoger

    @rrfeng #1 原文:“没学过的很难理解吧?不要高估你的用户。建议直观一点:小于 xx 或者 大于 xx”
    ======
    回复:小于大于要用到好几个字段, 并且不灵活,这只是一个配置, 所以改动的不多, 用户都是本科以上

  • 主 資深大佬 : RRRoger

    实在不行, 就自己撸一个简陋版的

  • 資深大佬 : airfling

    这个其实几段代码就可以代码,不知道 python 有没有 java 中的继承。

    ~~~
    public enum IntervalType implements ValueObject<IntervalType> {
    /**
    * 默认,最原始支持的模式
    */
    DEFAULT(“默认”, 2, new Default()),
    /**
    * 等值
    */
    EQ(“=a”, 1, new Equal()),
    /**
    * 不等于
    */
    NOT_EQ(“!=a”, 1, new NotEqual()),
    /**
    * 大于
    */
    GT(“>a”, 1, new GraterThan()),
    /**
    * 小于
    */
    LT(“<a”, 1, new LessThan()),
    /**
    * 大于等于
    */
    GT_EQ(“>=a”, 1, new GraterThanAndEqual()),
    /**
    * 小于等于
    */
    LT_EQ(“<=a”, 1, new LessThanAndEqual()),
    /**
    * 范围
    */
    BETWEEN(“∈[a,b]”, 2, new Between()),
    /**
    * 左开范围
    */
    LEFT_BETWEEN(“∈(a,b]”, 2, new LeftOpenBetween()),
    /**
    * 右开范围
    */
    RIGHT_BETWEEN(“∈[a,b)”, 2, new RightOpenBetween()),
    /**
    * 双开范围
    */
    OPEN_BETWEEN(“∈(a,b)”, 2, new OpenBetween());

    private String value;

    private Interval interval;

    private int valueNumber;

    /**
    * 此方法在页面调用
    *
    * @return number
    */
    @SuppressWarnings(“unused”)
    public int getValueNumber() {
    return valueNumber;
    }

    public String getValue() {
    return value;
    }

    /**
    * 获取转换后的区间
    *
    * @param alertType 报警类型
    * @param values 相关阈值
    * @return 区间
    */
    public String getInterval(int alertType, String… values) {
    return this.interval.convert(alertType, values);
    }

    /**
    * 与{@link #getInterval 相反的一个方法}
    *
    * @param interval 区间
    * @return 报警相关的阈值
    */
    public String[] resolveInterval(String interval) {
    if (this.interval instanceof Default) {
    return PattenUtils.reverseResolve(interval);
    }
    return PattenUtils.regexNumber(interval);
    }

    IntervalType(String value, int valueNumber, Interval interval) {
    this.value = value;
    this.valueNumber = valueNumber;
    this.interval = interval;
    }

    @Override
    public boolean sameValueAs(final IntervalType other) {
    return this.equals(other);
    }

    public class GraterThan implements Interval {

    @Override
    public String convert(int alertType, String… number) {
    return “(” + number[0] + “,∞)”;
    }
    }

    ~~~

  • 資深大佬 : lithbitren

    如果仅限于数字和正负无穷的话,其他表达式直接插 f-string 也可以接受,实现起来似乎并不难,不过估计应该是有人做过,唯一吐槽的就是数学符号在 idle 里打起来麻烦,改成其他约定符号加上运算符重载,理论上应该可以做到直接用表达式完成判断。

  • 資深大佬 : littleshy

    我配置里也有用到这个,我是直接用正则解析下。有没有解析集合表达式的轮子 例如:`(-∞, -600]∪[600, +∞)`

  • 資深大佬 : Vegetable

    是你觉得直白还是用户觉得直白了?你不觉得键鼠输入表达式很麻烦吗?
    前端应该是一个表单输入条件,先选择运算符,<=,再输入值-600,然后单击新增规则,选择运算符>=,输入值 600

  • 主 資深大佬 : RRRoger

    @Vegetable #7 原文:“是你觉得直白还是用户觉得直白了?你不觉得键鼠输入表达式很麻烦吗?前端应该是一个表单输入条件,先选择运算符,<=,再输入值-600,然后单击新增规则,选择运算符>=,输入值 600”
    ======
    回复:这个方案是我暂定方案, 我觉得这样会灵活, 而且用户也很容易看懂, 这只是一个配置项

  • 主 資深大佬 : RRRoger

    @airfling 谢谢 我研究一下

  • 資深大佬 : princelai

    我印象中 postgreSQL 可以干这个事情

  • 資深大佬 : fkdog

    需求很怪。
    但是这种自己区间转不等式的自己不能编码解决吗?

  • 資深大佬 : daozhihun

    我觉得不要用这样的东西去表示,用户好不好理解不说,主要输入也很麻烦。
    先不说无穷大,并集符号等问题,用户输入错了是个麻烦事,你怎么提示他少了个括号或者开闭区间的上下界写反了?
    向上面说的橹个>=之类的表单更合适

  • 資深大佬 : stevenkang

    感觉这样容易弄出线上 bug,一会儿这里没输入对,一会儿那里没输入对。

  • 資深大佬 : zhuangzhuang1988

    RPLY

  • 資深大佬 : Licia

    ∪这种符号输入很麻烦吧,比如我就只会复制

  • 資深大佬 : siweipancc

    参考一下 guava?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具