2
假設我有一個散列,其中包含傳遞驅動程序列表(對於傳統的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"
}
]
這是否適用於排序功能? '函數(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