record - 在 Pascal 中计算记录的唯一值
问题描述
我很难找到如何检查记录数组中的一个元素中有多少唯一值。
这就是我的意思:我有一个包含 1,1,1,2,2,3,5,8 的记录在 python 中我会使用 set() 找出有 5 个唯一值(1,2,3, 5,8)。如何在帕斯卡中做到这一点?
先感谢您!
解决方案
在 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);
推荐阅读
- tendermint - Tendermint 点对点中的广播和八卦
- javascript - 从 COLUMN_DEFAULT 中选择时,MySQL Escapes 字段的默认值
- java - 使用 getValueAt() 方法时如何避免空值?
- android - 尝试为警报对话框设置自定义 xml 文件
- mysql - 如何使用 Node Js 创建嵌套的 JSON 响应
- ios - 有类似的方式代码来使用这个 App-Prefs:root=Privacy&path=LOCATION
- sql - 在 SQL 中使用 In 和 join 有什么区别?
- c# - 如何在 Dockerfile 中正确缓存 C# dotnet 核心包?
- html - 不适用将文本与边距自动对齐到中心
- javascript - 在 ASP.Net MVC 中使用 Membership 会引发异常