我有一个数组,其中一些元素是“重复”,我想删除数组中的重复。
所以比如左边的列表(数组)变成右边的数组:
Ingredients: Ingredients:
Apples Apples
Apples Oranges
Oranges Bananas
Oranges
Oranges
Bananas
这样做的好算法是什么?
现在这就是我的伪代码的样子:
for each element in ingredients (counter j)
for each element-below-current-element (counter k)
if ingredients[i] == element-below-current-element[j]
splice (delete) ingredients[i]
但现在的问题是我注意到如果原始列表有奇数个元素,那么我可能会得到这样的结果:
Ingredients: Ingredients:
Apples Apples
Oranges Oranges
Oranges Oranges
Oranges Bananas
Bananas
一切正常,除了我可能会得到一种成分的双倍。
这是我的实际代码实现,在javascript中并带有一些角度元素(例如 $scope),尽管它并不重要。
for(var j = 0; j < $scope.groceryList.length; j++){
for(var k = j+1; k < $scope.groceryList.length; k++){ // for each of elements below current element (j)
if ( $scope.groceryList[j].name == $scope.groceryList[k].name){
$scope.groceryList.splice(k, 1);
}
}
}
现在让我明白的是,每当你删除一个数组元素时,数组长度是如何减少的,这会导致你的计数器在下一次迭代中向前跳跃一个元素等等......