在KRL中对哈希进行“ORDER BY ... LIMIT ...”样式查询

时间:2012-03-26 16:20:55

标签: krl

假设我有一个包含传递驱动程序列表的哈希值(对于经典flower shop scenario)。每个驱动程序都有一个评级和一个事件信号URL(ESL)。我想只向该列表中的前三名车手举起一个赛事,按排名排序。

使用关系数据库,我会运行如下查询:

SELECT esl FROM driver ORDER BY ranking LIMIT 3;

KRL有没有办法做到这一点?有两个要求:

  1. 一种排序哈希的方法
  2. 限制foreach迭代次数
  3. 的方法

    第二个可以这样解决:

    rule reset_counter {
        select when rfq delivery_ready
        noop();
        always {
            clear ent:loop_counter;
            raise explicit event loop_drivers;
        }
    }
    
    rule loop_on_drivers {
        select when explicit loop_drivers
        foreach app:drivers setting (driver)
        pre {
            esl = driver.pick("$.esl");
        }
        if (ent:loop_counter < 3) then {
            // Signal the driver's ESL
        }
        always {
            ent:loop_counter += 1 from 0;
        }
    }
    

    但那是一种愚蠢的行为。是否有更多的KRL-ish方法呢?我该如何解决订购问题呢?

    编辑:这是app:drivers数组的格式,以使问题更容易回答:

    [
        {
            "id": "1",
            "rating": "5",
            "esl": "http://example.com/esl"
        },
        {
            "id": "2",
            "rating": "3",
            "esl": "http://example.com/esl2"
        }
    ]
    

1 个答案:

答案 0 :(得分:2)

如果不知道哈希的形式,就不可能给你一个特定的答案,但你可以使用sort运算符进行排序,然后使用pick运算符或hash

这样的东西

driver_data.sort(函数(){...})挑( “$ ..东西[:2]”)。

“something”是相关字段的哈希名称。