我有一个列表:冗余代码
id num1 ...
-----------
1 123 ...
1 456 ...
2 789 ...
2 666 ...
,并希望基于它创建一个对象数组:
{ 1, [123, 456], [...] },
{ 2, [789, 666], [...] }
这里是我的伪代码:
int previous_id = -1;
array a1 = null; // B
array a2 = null; // B
array a3 = null; // B
array a4 = null; // B
while (++c) { // c is a pointer pointing to the list
if (c.id != previous_id && previous_id != -1) {
j[i++].id = previous_id; // A
j[i++].data1 = a1; // A
j[i++].data2 = a2; // A
j[i++].data3 = a3; // A
j[i++].data4 = a4; // A
a1 = null; // B
a2 = null; // B
a3 = null; // B
a4 = null; // B
}
a1.add(c.num1);
a2.add(c.num2);
a3.add(c.num3);
a4.add(c.num4);
previous_id = c.id;
}
j[i++].id = previous_id; // A
j[i++].data1 = a1; // A
j[i++].data2 = a2; // A
j[i++].data3 = a3; // A
j[i++].data4 = a4; // A
它正在工作,但有一些冗余代码,即A和B
是否可以合并它们使其更加简洁明了?
为什么你称之为多余?如果部分代码不清楚,则为该语句添加注释。你的意思是低效吗? –
取决于实现语言中'j [i ++]。data = a'的语义 - 如果它保留对对象的“实时”引用,以便后续的'a.add(c.num)'调用将被观察到在'data'成员中,那么你可以切换东西。 OTOH如果'data'当时需要'a'的副本,并且从不观察更新,我想不出更新的方式 –
@AhishekBansal更新了我的问题。是的,也许它不是多余的,它看起来不够简洁。当我完成我的代码时,我觉得应该有一种方法将'A'和/或'B'合并在一起,但不知道该怎么做。 – Deqing