Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2011, 09:07   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос TStringList операции с данными

В цикле добавляем в TStringList данные типа:
Red
Green
Yellow
Brown
Black
Такие записи могут повторяться и может получиться на выходе:
Red
Red
Red
Green
Yellow
Yellow
Brown
Black
Black
Black
После чего делаем проверку в TStringList на повторные записи. При проверке мы подсчитываем сколько раз повторяется то или иное слово (Red = 3, Green = 1, Yellow = 2, Brown = 1, Black = 3). Потом подсчитываем сколько всего разных записей (Red, Green, Yellow, Brown, Black = 5).
Такое реально сделать?
Shouldercannon вне форума Ответить с цитированием
Старый 07.07.2011, 09:09   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

КОнечно, С помощью второго СтрингЛиста.
FaTaL вне форума Ответить с цитированием
Старый 07.07.2011, 10:39   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

во второй стринглист добавляете данные из первого запрещая дубликаты
Код:
//откидываем дубликаты
sl2.Sorted := True;//обязательно
sl2.Duplicates:=dupIgnore;
sl2.Assign(sl1);//копируем содержимое первого листа
потом в цикле перебирая строки второго листа сравниваем в цикле с первым листом и подсчитываем

Последний раз редактировалось SERG1980; 07.07.2011 в 10:42.
SERG1980 вне форума Ответить с цитированием
Старый 07.07.2011, 10:58   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

абсолютно несложно и на одном TStringList'е такое написать. Особенно, если допустимо отсортировать содержимое методом .Sort
тогда вообще без поиска - прямой однопроходный цикл даст требуемое число.


p.s.
Цитата:
Сообщение от SERG1980
потом в цикле перебирая строки второго листа сравниваем в цикле с первым листом и подсчитываем
а зачем в вашем варианте перебор?
sl2.Count уже сразу даст ответ о количестве разных записей...



ДОБАВЛЕНО
кстати, я бы копирование информации сделал не через sl2.Assign(sl1), а банально: sl2.Text := sl1.Text;

Последний раз редактировалось Serge_Bliznykov; 07.07.2011 в 11:06.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.07.2011, 11:00   #5
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Дык там нужно ещё и подсчитать сколько каждого цвета
SERG1980 вне форума Ответить с цитированием
Старый 07.07.2011, 11:12   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Дык там нужно ещё и подсчитать сколько каждого цвета
да не боже ж мой...

ему нужно:
Цитата:
Потом подсчитываем сколько всего разных записей (Red, Green, Yellow, Brown, Black = 5).
Т.е. нужно посчитать количество РАЗНЫХ записей. Что Ваш код и сделает.
Код:
ShowMessage('Всего различных записей: '+IntToStr(sl2.Count));
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.07.2011, 11:37   #7
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да не боже ж мой...

ему нужно:

Т.е. нужно посчитать количество РАЗНЫХ записей. Что Ваш код и сделает.
Код:
ShowMessage('Всего различных записей: '+IntToStr(sl2.Count));
Это ответ на вторую часть задания
А какже эти слова автора понять
Цитата:
При проверке мы подсчитываем сколько раз повторяется то или иное слово (Red = 3, Green = 1, Yellow = 2, Brown = 1, Black = 3). Потом подсчитываем сколько всего разных записей (Red, Green, Yellow, Brown, Black = 5).
Такое реально сделать?

Последний раз редактировалось SERG1980; 07.07.2011 в 11:43.
SERG1980 вне форума Ответить с цитированием
Старый 07.07.2011, 11:53   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Это ответ на вторую часть задания
как же эти слова автора понять
Цитата:
При проверке мы подсчитываем сколько раз повторяется то или иное слово (Red = 3, Green = 1, Yellow = 2, Brown = 1, Black = 3). Потом подсчитываем сколько всего разных записей (Red, Green, Yellow, Brown, Black = 5).
Такое реально сделать?
Угу. я проглядел...
ну тогда тем более удобнее пройтись в цикле (одного проход хватит. А если предварительно отсортировать список - так задача вообще элементарная становится)

вот пример. (результаты выводятся в Memo1)
Код:
Memo1.Lines.Clear;
sl1.Sort;
if  sl1.Count>0 then begin
  OneElement := sl1.strings[0];
  CurCount := 1;
  AllUniqCount := 0; 
  for i:=1 to sl1.Count-1 do begin
     if OneElement = sl1.strings[i] then Inc(CurCount)
     else begin
        Memo1.Lines.Append(OneElement + ' : '+IntToStr(CurCount);
        Inc(AllUniqCount);
        OneElement := sl1.strings[i];
        CurCount := 1;
     end;
  
   inc(AllUniqCount);
   // вывод последней группы
   Memo1.Lines.Append(OneElement + ' : '+IntToStr(CurCount);
   Memo1.Lines.Append('Всего уникальных записей: '+IntToStr(AllUniqCount));

  end;
end;

Последний раз редактировалось Serge_Bliznykov; 07.07.2011 в 11:55.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TStringList adr Общие вопросы Delphi 0 05.11.2010 18:29
Операции над данными в ListBox Mr.User Помощь студентам 14 23.11.2007 03:26
TStringList nimf Общие вопросы Delphi 5 15.11.2007 14:44
Операции над данными yulia БД в Delphi 24 21.05.2007 01:18