2012-07-11 65 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),则不需要这个。