Подсчет уникальных значений записи в Паскале - PullRequest
0 голосов
/ 13 ноября 2018

Я изо всех сил пытаюсь найти, как проверить, сколько уникальных значений есть в одном из элементов в массиве записей.

Вот что я имею в виду: У меня есть запись, содержащая 1,1,1,2,2,3,5,8 В Python я бы использовал set (), чтобы узнать, что есть 5 уникальных значений (1,2,3,5,8). Как это сделать на Паскале?

Заранее спасибо!

1 Ответ

0 голосов
/ 15 февраля 2019

Нет встроенного способа сделать это в Паскале. Исходя из вашего вопроса, я предполагаю, что ваши записи имеют только один номер. Я вижу два способа сделать это. Во-первых, если числа находятся в ограниченном диапазоне, скажем, от 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.

сортировка RecordList

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

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