计算 Pascal 中记录的唯一值
Counting unique values of record in Pascal
我很难找到如何检查记录数组中的一个元素中有多少个唯一值。
这就是我的意思:
我有一条包含 1,1,1,2,2,3,5,8 的记录
在 python 中,我将使用 set() 找出有 5 个唯一值 (1,2,3,5,8)。如何在 Pascal 中做到这一点?
提前致谢!
Pascal 中没有内置的方法来做到这一点。根据你的问题,我假设你的记录只有一个数字。我看到有两种方法可以做到这一点。首先,如果数字在一个有限的范围内,比如 1 到 1,000,000,设置一个布尔数组,比如:
var InList : array[ 1 .. 1000000] of boolean;
初始化为假:
fillchar( InList, sizeof( InList), 0);
然后遍历所有记录并将相应的元素设置为 true。例如,如果第一个记录值为 123,则:
InList[ 123] := true; (but refer to your record to get the 123).
然后在你检查完所有记录后,检查 InList 并计算 true 的数量:
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);
我很难找到如何检查记录数组中的一个元素中有多少个唯一值。
这就是我的意思: 我有一条包含 1,1,1,2,2,3,5,8 的记录 在 python 中,我将使用 set() 找出有 5 个唯一值 (1,2,3,5,8)。如何在 Pascal 中做到这一点?
提前致谢!
Pascal 中没有内置的方法来做到这一点。根据你的问题,我假设你的记录只有一个数字。我看到有两种方法可以做到这一点。首先,如果数字在一个有限的范围内,比如 1 到 1,000,000,设置一个布尔数组,比如:
var InList : array[ 1 .. 1000000] of boolean;
初始化为假:
fillchar( InList, sizeof( InList), 0);
然后遍历所有记录并将相应的元素设置为 true。例如,如果第一个记录值为 123,则:
InList[ 123] := true; (but refer to your record to get the 123).
然后在你检查完所有记录后,检查 InList 并计算 true 的数量:
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);