计算Pascal中记录的唯一值

时间:2018-11-13 09:14:27

标签: record pascal

我很难找到如何检查记录数组中的一个元素中有多少个唯一值。

这是我的意思: 我有一个包含1,1,1,2,2,3,5,8的记录 在python中,我将使用set()找出5个唯一值(1,2,3,5,8)。在帕斯卡如何做?

先谢谢您!

1 个答案:

答案 0 :(得分:0)

在Pascal中没有内置的方法可以做到这一点。根据您的问题,我认为您的记录只有一个号码。我看到两种方法。首先,如果数字在有限范围内(例如1到1,000,000),则设置一个布尔数组,例如:

var InList : array[ 1 .. 1000000] of boolean;

将其初始化为false:

fillchar( InList, sizeof( InList), 0);

然后遍历所有记录并将相应元素设置为true。例如,如果第一个记录值为123,则:

InList[ 123] := true; (but refer to your record to get the 123).

然后,您遍历所有记录后,遍历InList并计算真实数:

count := 0;

for i := 1 to 1000000 do 
if InList[ i] then inc( count);

第二种方法(不依赖于有限集合中的值)是首先对记录数组进行排序(使用 如果您有大量记录,则排序算法比较好)。然后遍历列表并以这种方式计算数字:

假定您具有其中包含NumberOfRecords条记录的RecordList。

对RecordList进行排序

count := 1; // count the first one!

for i := 2 to NumberOfRecords do
if RecordList[ i] <> RecordList[ i - 1] then inc( count);