2012-07-11 68 views
0

我有一個空列表接受字符串值。算法建議唯一值和編輯

當要添加一個元素時,我需要檢查列表中是否存在具有相同值的字符串,如果是,應該發生異常(ROLE 1只能是數組中的唯一值)。

現在我想讓用戶讓列表中的編輯元素,如果新編輯的值是唯一的罰款,否則應該發生異常。

我的問題是:讓我們想象用戶選擇編輯元素,但實際上不會更改發送到服務器時的值。系統應該檢測到元素沒有被更改並接受值(即使已經存在於列表中)。

PS我簡化了這個問題,我實際上使用MVC和EF & linq。我的問題是,我無法檢查插入的值是否已經被編輯或者不在我的應用程序的界面中。

你能幫我找出一個有效的算法來解決這個問題嗎?由於

讓我知道如果這個問題是非常明顯的,或者您需要了解更多信息

+0

你使用的是什麼類型的列表,是列表框還是其他類型的列表?如何將這些值添加到控件中?編輯如何被接受或中止?這些項目是否是數據綁定的? – JonC 2012-07-11 15:14:16

+0

Re「我的問題是:...」:如果您在.Net中研究數據綁定,那麼所有這些都由這些庫處理。 – 2012-07-11 15:16:07

+0

值是在數據庫中,所以是一個表,我只有一個文本框,我可以編輯一個項目。 – GibboK 2012-07-11 15:16:35

回答

1

這是我的解決方案:

  1. 讓客戶檢查如果文本進行了修改。如果沒有,告訴服務器沒有修改。如果這是不可能的,客戶端會發送orinigial文本和修改後的文本,然後服務器將能夠檢查它是否被修改。 (如果不是,則不需要觸摸您正在存儲的數據)。這適用於桌面環境和網絡環境。

  2. 預先不使用列表,使用一個集合(可能是一個哈希集合)。該設置將只允許每個項目一次。如果你不能,我猜你可以繼續使用列表。如果我理解正確,您使用的是數據庫,那麼如果您可以直接與數據庫引擎進行交互而不是同步列表(或設置),則您的應用程序將具有性能提升。

  3. 將列表/版本的版本轉換爲添加 - 刪除對(而不是設置項目)。在做任何修改之前,檢查一下列表/集合是否包含新值。如果新值已經存在,則可以拋出異常或向客戶端發送消息(或者更適合您的環境的任何消息)。

  4. 您可能想要將訪問權限同步到列表/集合,並保持簡單:使用鎖定(監視器)。我會考慮讀寫鎖定,但是在學習的時候這會讓事情變得複雜。 [如果直接與數據庫引擎對接,則可以讓它處理它]。注意:如果你只有一個單一的客戶端......(除非單個客戶端可以發送多個併發請求...:P),則不需要這個。