Название: Отметить дубликаты в столбце TableWidget Отправлено: crocus от Декабрь 03, 2006, 10:47 Есть необходимость отметить дубликаты в столбце TableWidget, предполагаю - нужно выбрать все значения столбца в QStringList, затем с помощью std::unique перенести неуникальные в новый список - затем уже в новом оставить только уникальные и в конце сравнить со столбцом TableWidget - выделить дубликаты.
Но не знаю как использовать std::unique в Qt. По возможности подкиньте пример использования std в Qt и/или есть более простой/готовый алгоритм поиска дубликатов в Qt. Название: Отметить дубликаты в столбце TableWidget Отправлено: bigirbis от Декабрь 03, 2006, 11:03 Есть более логичный вариант. В свое время реализовывал.
Можно написать шаблон для QAbstractItemModel и передать ему в качестве аргумента твою модель. Еще надо реализовать итераторы. В базовом варианте займет где-то пол-дня, но на будущее очень даже пригодится. Название: Отметить дубликаты в столбце TableWidget Отправлено: Tonal от Декабрь 03, 2006, 12:52 std::unique предполагает что неуникальные значения идут подряд.
Например последовательность отсортированная. Если это не так, то проще отфильтровать руками: Вот псевдокод: Код:
Можно сделать простейшего наследника от QSortFilterProxyModel и засунуть в него немудрящую эту логику. ;-) Название: Отметить дубликаты в столбце TableWidget Отправлено: crocus от Декабрь 06, 2006, 04:59 Ну вот получилось как-то так:
Код: void NewspaperWindow::findDuplicates() Правда на скоряк недодумал как выделять строки, а не только ячейки. Может кто подшлифует код - буду признателен!! Название: Отметить дубликаты в столбце TableWidget Отправлено: bigirbis от Декабрь 06, 2006, 12:02 Интересно, как это будет работать при большом количестве строк?
Название: Отметить дубликаты в столбце TableWidget Отправлено: crocus от Декабрь 06, 2006, 12:06 то bigirbis:
Возьми да проверь!! Я проверил на таблице из 3284 строк - сравним результаты??? Название: Отметить дубликаты в столбце TableWidget Отправлено: bigirbis от Декабрь 06, 2006, 12:31 Вопрос по какому принципу строка определяется как уникальная. Судя по алгоритму, первая встреча такой строки считается уникальной, а все остальные нет. В таких случаях, думаю, все такие строки должны быть отмечены как дубликатные. Это становится актуально при наличии нескольких столбцов!!!
|