我有一個有趣的問題。我正在爲我的應用程序創建一個修訂系統。它的工作方式是每創建一個新的post對象,post對象都會嘗試爲每個已更改的屬性創建一個歷史記錄。如何比較兩個有序數組中的結構數據?
因此,如果post.subject被編輯,則會在歷史記錄表中創建一個新的修訂記錄。它只會存儲新的主題文本(以及相關的帖子和創建它的用戶)。如果多個屬性發生更改,它們將傳遞給一個數組,並且每個屬性都將存儲在其自己的記錄中,並由UUID分組。
爲了減少多餘的記錄,歷史對象將嘗試找到任何現有的修訂並更新它們if the existing revisions are younger than a certain time limit.
這樣我們可以在同一修訂版本中保持在短時間段內所做的更改。如果他們不年輕,那麼會創建新的修訂版。
場景:
- 用戶foo改變上後所述受檢者(被創建的對象修改)。
- User Foo返回並更改主體和主題(現有主題修訂更新;創建新的主體修訂)。兩個修訂都需要具有相同的UUID。
每個帖子對象都有三個屬性subject, body, footer
。我已經做了簡單的部分:通過循環包含修訂數據的參數數組,創建新的修訂版(如果不存在)。
// Find existing revisions younger than some time value
local.revisions = this.findAll(where="rules go here", returnAs="struct");
// If no revisions are found create new ones
if (! arrayLen(local.revisions))
{
// Create UUID to group revisions
local.revisionGUID = createUUID();
// loop over the arguments array (contains revision data) and create new revisions
for (local.i in arguments.data)
local.history = this.new(properties=local.i, revisionGUID=local.revisionGUID);
local.histroy.save();
}
// If some revision data does exist, update existing ones, and create the new ones; the UUID for new revisions should use the UUID of existing revisions
else
{
logic goes here
}
現在是棘手的部分。如果一組修訂版本返回,我需要這樣做:
- 將它與args作用域中的數組進行比較。
- 對於args作用域中現有修訂版數組中不存在的每個修訂版,我需要創建它。對於確實存在的args作用域的修訂(意味着它在年齡限制下具有匹配的修訂版本),我需要使用args作用域中相應修訂的數據更新其數據。
它不能像arrayContains()那樣簡單,因爲存儲在數組中的數據是結構體..我不知道如何比較包含結構體的數組!
問:
- 上午我接近問題的正確方法?
- 有什麼方法可用於完成上述功能?
使用WDDX或JSON序列化數組內的結構,然後進行字符串比較。 – orangepips 2011-05-27 18:15:59
@orangepips會工作嗎? WDDX中的結構鍵可以保證有序嗎? – Henry 2011-05-27 19:21:50