在这里,我需要根据数量拆分(克隆)原始对象。每当我拆分对象时,都会为新创建的Object分配新的BaseID。 (请耐心等待)
我想要实现的目标:
每当一个对象(源)分裂时,新创建的对象应该在下一次添加到源对象(如果源索引为0,则在索引1处)。
**这就是我维护Object **的方式
我使用List来存储对象,这意味着最后会添加新创建的对象。
什么是瓶颈
1)未知来源索引 - 基于某些过滤我选择了来源,因此我不知道源对象的索引。
2)平均我将执行的分割数 - 平均情况为每秒300到400次。
3)列表的大小 - 使用当前的方法,我开始使用对象计数300(在列表中),经过半处理后,它已达到600万。
例如:在输入中,我有以下列表,请注意每个新创建的对象的BaseID更改,而当输入转换为对象时,Org_BaseID永远不会更改并等于BaseID。
输入列表是根据某些字段(现在为Say Date)排序的,因此新分割的Object将与Order by fields字段的原始对象具有相同的值。
分割的一个例子
步骤1:根据数量拆分Object1(BaseID:S1,数量为100),例如80,20。请注意Org_BaseID永远不会更改,而New BaseID会分配给新对象。这是结果输出。
步骤2:使用BaseID拆分对象:S5基于数量,比如15,5。这是结果列表。
步骤3:使用BaseID拆分对象:S1基于数量,说70,10。
步骤4:如果我按最终列表排序,我将根据插入顺序对对象进行排序。
同样,如果数量大于0,任何对象都可以分割任意数量的时间。
方法我尝试过:
1)包括排序顺序字段,每当源对象拆分时,更新所有其他对象的排序顺序。 (如果具有排序顺序2的对象拆分,则将3个排序顺序分配给新对象,从而将排序顺序大于2的每个对象的排序顺序更新为当前排序顺序值+ 1),更新所有列表即O(n)。
2)使用键As Org_BaseID维护字典,而不是更新所有列表,更新具有特定Org_baseID的对象的排序顺序。
还有其他方法,我可以试试吗?
先谢谢,并感谢所有建议。
答案 0 :(得分:0)
我试过的方法
1)Allan S Approach-插入一个Object而不是添加。
我尝试了新方法
- 而不是在列表中插入或添加拆分对象(问题中提到的AVG 300到400 Add),我使用 Dictionary<字符串,对象> (以确保O(1))跟踪分割。
工作原理
对于每个拆分,在字典中添加对象(源对象的BaseID作为键,值将是新对象)。一个对象只会为当前循环拆分一个,因此密钥将是唯一的。
一旦拆分(其中一个循环),我将遍历主列表并创建一个新列表。对于主列表中的每个对象,我将添加将其添加到新列表中,然后将检查字典中是否存在给定BaseID的任何键,如果它在那里,则将其添加到新列表中。
使用这种方法,我只会重新创建一次List,并且它适用于较大的输入(比我的旧方法更好,即每次拆分的更新列表)。
我将尝试使用Linked List并检查性能。