【发布时间】:2011-01-29 09:40:48
【问题描述】:
我有点问题。我正在向ArrayList 添加数字,例如 156、340(当它是 TransferIn 或 Buy)等,然后我删除它们,比如 156、340(当它是 TransferOut、Sell)。以下解决方案可以毫无问题地解决这个问题。我遇到的问题是,对于一些旧数据,员工输入的总和是 1500 而不是 500+400+100+500。我将如何更改它,以便当有 Sell/TransferOut 并且 ArrayList 内部没有匹配项时,它应该尝试从该 ArrayList 添加多个项目并找到组合成聚合的元素。
ArrayList alNew = new ArrayList();
ArrayList alNewPoIle = new ArrayList();
ArrayList alNewCo = new ArrayList();
string tempAkcjeCzynnosc = (string) alInstrumentCzynnoscBezNumerow[i];
string tempAkcjeInId = (string) alInstrumentNazwaBezNumerow[i];
decimal varAkcjeCena = (decimal) alInstrumentCenaBezNumerow[i];
decimal varAkcjeIlosc = (decimal) alInstrumentIloscBezNumerow[i];
int index;
switch (tempAkcjeCzynnosc) {
case "Sell":
case "TransferOut":
index = alNew.IndexOf(varAkcjeIlosc);
if (index != -1) {
alNew.RemoveAt(index);
alNewPoIle.RemoveAt(index);
alNewCo.RemoveAt(index);
} else {
// Number without match encountred
}
break;
case "Buy":
case "TransferIn":
alNew.Add(varAkcjeIlosc);
alNewPoIle.Add(varAkcjeCena);
alNewCo.Add(tempAkcjeInId);
break;
}
}
【问题讨论】:
-
当您遇到这种特殊情况时......对数组进行排序并开始对元素求和,直到您点击/传递值(在您的示例中为 1500)。如果你击中它,那么你有一个可以转移出去的组合,如果没有......没有这样的组合,继续...... :)
-
@tzup - 不正确。考虑元素
1 12 100和值101。你会总结1 + 12 = 13然后100 + 13 = 113并说没有解决方案,而实际上有。 -
你说得对,我想我打字的速度比我想象的要快。