对象集合的分布式更新
本文关键字:更新 分布式 集合 对象 | 更新日期: 2023-09-27 18:31:40
当前程序中我的对象结构被组织成这样,Doc
对象包含Mention
对象的列表,每个Mention
对象都包含Word
对象的列表。单词通过它们在文档文本中的位置来识别,并且还存储了一些其他信息(其文本,其词网意义......
在程序的处理中(通过用户交互等) Word
可以访问和修改Mention
对象值(例如,更新其感知)。用户需要与每个Mention
进行交互。
我在这里遇到的问题是,属于同一Doc
的几个Mention
可能共享一些相同的Word
(毕竟,所有单词都在文档中)。那么当这样的单词更新时,我应该如何更新其他Mention
中包含的相应Word
呢?换句话说,这些Word
在文本中的相同位置,应该一起更新,但它们单独存储在提及中。那么一个更新应该如何改变其他更新呢?
我使用的一种方法是,当修改Mention
中的Word
时,我检索所有提及(从存储的Doc
引用中),然后在包含它的任何Mention
中更新相应的Word
。这需要一个 for 循环,每次更新都会进行 Equals 检查,这是相当多的处理。
我想到的第二种方法是不要在Mention
中存储单独的Word
列表。只有一个Word
s的列表存储在Doc
中,并且在每个Mention
中Word
属于Mention
的索引存储在一个列表中。所以在更新Word
时,我会从Doc
的引用中调用一个更新函数来更新Doc
的列表。但是,问题在于返回Mention
的整个Word
列表的函数。我必须返回一个新的Word
列表,使用索引,我必须在Doc
的列表中选择实际的Word
。这是必需的,因为该Mention
中的所有Word
可能在不久前被其他Mention
修改过。或者,我可以检查Word
是否已更新并复制更新。但是它仍然需要一个 for 循环遍历Mention
中的所有Word
,所以它看起来仍然很奇怪(每次检索列表 = 长操作)
我想问的是,此更新问题是否有更好的解决方案。任何帮助都非常感谢:)如有必要,我将在此处添加部分代码。
正如我在评论中已经说过的,不要为文档中的同一个单词创建多个Word
实例。所以,关于你的评论:文档中的一个物理词永远不会有w1
和w2
。只会有w
.
例:
var w = new Word(2, 3, "age", 1)
var mention1 = new Mention(w);
var mention2 = new Mention(w);
mention1.UpdateWord(); // sets the fourth property of w to 3
mention2.PrintWord(); // prints (2, 3, "age", 3)
这有效,因为两个Mention
实例都在同一Word
实例上工作。