计算数组中的唯一值

时间:2016-11-02 10:14:22

标签: arrays count unique pascal

我很难计算数组中唯一值的数量。我无法真正使用[i + 1]进行评估,因为它可能会将第i + 1个位置之后的任何值计为唯一,而实际上后来在数组中有重复的位置(参见28和29)......任何想法?非常感谢帮助!

[28,28,29,30,01,28,02,29]

function CalcDiscretePeriods(const Arr: Array):Integer;
var
   i: Integer;
begin
   for i:= 0 to High(Arr)-1 do
   begin
       if (Arr[i]<>Arr[i+1]) then countD:= countD + 1;
   end;
end;

(我正在使用MacOSX,免费Pascal编译器版本2.6.4 [2014/02/26]用于i386,如果这是相关的)。

1 个答案:

答案 0 :(得分:0)

根据个人经验,您可以使用以下算法成功计算数组中的唯一值。

你需要第二个数组,例如'uniqueArray'(理想情况下像数据结构这样的散列图会比数组更好)

1)从现有数组'Arr'中迭代每个元素'i',从i = 0到高(Arr)-1

2)对于每个'i',将此值复制到第二个数组'uniqueArray' ONLY如果 uniqueArr尚未具有此值(需要对uniqueArr中的每个元素进行循环)。

3)成功复制后,增加计数。

我担心我不熟悉这种语言以提供任何实际的例子。