对KRL中的哈希执行“ORDER BY ... LIMIT ...”样式查询
问题描述:
假设我有一个散列,其中包含传递驱动程序列表(对于传统的flower shop scenario)。每个驱动程序都有一个评级和一个事件信号URL(ESL)。我只想向该列表中排名前三的车手举办一场比赛,并按排名进行排序。对KRL中的哈希执行“ORDER BY ... LIMIT ...”样式查询
与关系数据库,我会运行这样的查询:
SELECT esl FROM driver ORDER BY ranking LIMIT 3;
有没有办法在KRL做到这一点?有两个要求:
- 排序的哈希
- 的一种方式来限制次
foreach
迭代
第二个可以解决这样的数道:
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;
}
}
但是这是一种kludgy。是否有更多的KRL方法可以做到这一点?我应该如何解决订购问题?
编辑:这里是app:drivers
阵列格式,让用户轻松回答的问题:
[
{
"id": "1",
"rating": "5",
"esl": "http://example.com/esl"
},
{
"id": "2",
"rating": "3",
"esl": "http://example.com/esl2"
}
]
答
不知道散列的形式,这是不可能给你一个明确的答案,但你可以使用排序操作者进行排序,然后使用pick操作或哈希
喜欢的东西
driver_data.sort(函数(){...})挑。( “$ ..东西[2]”)
“something”是相关字段散列的名称。
这是否适用于排序功能? '函数(a,b){a.pick(“$ .. rating”)> b.pick(“$ .. rating”); }' – 2012-03-26 16:52:31
是的,排序功能应该给你想要的结果。排序函数的一个变体是'sortedDrivers = app:drivers.sort(function(a,b){a {“rating”}> b {“rating”}});'' – edorcutt 2012-03-26 17:08:48