我很难找到如何检查记录数组中的一个元素中有多少个唯一值。
这是我的意思: 我有一个包含1,1,1,2,2,3,5,8的记录 在python中,我将使用set()找出5个唯一值(1,2,3,5,8)。在帕斯卡如何做?
先谢谢您!
答案 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);