我有一個列表:冗餘代碼
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