以下功能项目的一个新的列表与旧的和发现的差异:已经从旧的列表中删除添加到新名单 如何比较两个列表并找出它们之间的差异?
- 项目(不存在的原始列表)。
我写了两个循环来实现这一点,他们产生了以下的输出:
oldItems = "an, old, list" ---> Items To Delete: 'an,old'
newItems = "a, new, list" ---> Items To Create: 'new'
第一个问题是a
应在项目创建露面,但我相信,因为它的一个子an
它没有被拾起。
第二个问题(?)是我做两个循环似乎效率低下。代码可以重构吗?
public function testList() hint="Compares two lists to find the differences."
{
local.oldItems = "a, new, list";
local.newItems = "an, old, list";
local.toDelete = "";
local.toCreate = "";
// Loop over newItems to find items that do not exist in oldItems
for (local.i = 1; local.i LTE ListLen(local.newItems, ", "); local.i++)
{
if (! ListContains(local.oldItems, ListGetAt(local.newItems, local.i, ", ")))
{
local.toCreate = ListAppend(local.toCreate, ListGetAt(local.newItems, local.i, ", "));
}
}
// Loop over old items to find items that do not exist in newItems
for (local.i = 1; local.i LTE ListLen(local.oldItems, ", "); local.i++)
{
if (! ListContains(local.newItems, ListGetAt(local.oldItems, local.i, ", ")))
{
local.toDelete = ListAppend(local.toDelete, ListGetAt(local.oldItems, local.i, ", "));
}
}
writeDump(var="Items To Delete: '" & local.toDelete & "'");
writeDump(var="Items To Create: '" & local.toCreate & "'", abort=true);
}
亚伦,这很棒,谢谢。我认为这对我来说将会非常有用。然而,就我的目的而言,我认为我将使用一个循环,并使用Ray提到的ListFind()函数。我认为你的UDF很棒,但在这种情况下这有点矫枉过正。感谢演示! – Mohamad 2011-01-11 13:17:04
不用担心。但是,我确实回答了你的问题:) – 2011-01-11 13:44:34