首页 > 解决方案 > 在 Pascal 中计算记录的唯一值

问题描述

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

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

先感谢您!

标签: recordpascal

解决方案


在 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);

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

假设您有 RecordList,其中包含 NumberOfRecords 记录。

排序记录列表

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

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

推荐阅读