Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Как уменьшить множество собранных сегодня айди, отняв пересечение со множеством собранных вчера айди?
Ясно дело, ответов на этот вопрос много, но я специально задаю неконкретный вопрос в надежде получить самый простой ответ.
Или буду благодарен за ссылку на подходящую тему.
Главное — нашёл инструменты — и список вычесть, и удалить дубли в таблице, и др.
Теперь могу разбираться, теперь не советы помогут, а работа и вникание.
Самое то, если можно строки таблицы удалять по дублям в одном столбце.
Как обнаружил, удобнее, безошибочнее удалять по двум совпавшим параметрам, например и время и айди.
Но я так не умею и у меня дубли в таблице плохо удаляются (например человек изменил объявление), потому проще по быстрому вот так
Если коротко — одинаковыми строки можно считать, если совпадает не один столбец, а два.
Если по одному столбцу сличать и удалять, будут неточности. Целиком строки сравниваются плохо, так как за день произошли изменения.
Мне очень много даёт просто сортировка в OpenOffice по столбцу.
Eсли кто код мне напишет, Таблица называется Table, списки(столбцы) называются List1; List2, т.к. я всё равно его не читаю пока.
А разве стандартный кубик ZP по работе с таблицами не умеет удалять дубли по совпадению нескольких столбцов? Мне кажется там есть такое ....
P.S ZP сейчас под рукой нет, поэтому посмотреть не могу ...
А может и не умеет.
Mожет есть сортировка таблицы по двум столбцам в Open Office/Excel, но не удаление дублей строки по двум столбцам в зенке.
Я не знаю, я много чего не знаю.
Ну если нет такого в стандартном кубике, то можно так сделать
Код:
var t = project.Tables["result"];
List<string> lst = new List<string>();
lock(SyncObjects.TableSyncer){
for(int i=t.RowCount-1; i>=0; i--){
var s = t.GetCell("A", i)+t.GetCell("B", i);
if (lst.Contains(s))
t.DeleteRow(i);
else
lst.Add(s);
}
}
Такой код удалит дубли по 2м столбцам (в данном примере A и B)
Само собой, код отлично работает! (Но только который выше, который Ваш.) Теперь вникаю в Ваш код.
Самое любопытное — что у вас делает, для чего List<string> lst = new List<string>();
Ваш сниппет сложнее и интереснее, чем сниппет столбец AQ в список List, который пригодится перед вычитанием списков, вот он
Код:
var list = project.Lists["List"];
var table = project.Tables["Table"];
lock(SyncObjects.TableSyncer)
{
for(int i= 0; i < table.RowCount; i++)
{
list.Add(table.GetCell("AQ", i)); //Вместо "AQ" нужную колонку таблицы
}
}
Я всегда таблицу называю Table, легче понимать (учусь понимать код).
Переназвал у Вас переменную t английским словом table(таблица); переменную s переназвал cells (ячейки) и получилось вот так
Ничего не испортил? (Исправлено, но я бы не брал мой код, а брал бы WebBot's one)
Changed WebBot's post:
Код:
var table = project.Tables["Table"]; //Вместо "Table" нужную таблицy
List<string> lst = new List<string>();
lock(SyncObjects.TableSyncer){
for(int i=table.RowCount-1; i>=0; i--){
var cells = table.GetCell("A", i)+table.GetCell("B", i);
if (lst.Contains(cells))
table.DeleteRow(i);
else
lst.Add(cells);
}
}
Hаписанное никак не могу дочитать до конца. Не всё понимаю в строчке GetCell. Стараюсь вникнуть.
1st не смог переназвать. Знаний у меня маловато.
Любопытства ради чего будет, если из кода убрать замок lock(SyncObjects.TableSyncer), он есть и в первом, и во втором сниппетах.
Ведь, думаю, всё равно работать будет.
То, что строки Вы перечисляете с конца до начала, а в первом сниппете с начала до конца, несущественно. Это понятно.
(int i= 0; i < table.RowCount; i++)
(int i=table.RowCount-1; i>=0; i--)
А чего там два минусика и два плюсика, непонятно, но видимо надо запомнить.
от того как переназвать переменные суть не меняется
если лок убрать, то в мнгопотоке возможны глюки
то что строки перебираются с конца - существенно в данном случае
в результате переименований в одном месте переименовать забыли (выше SergSh уже заметил)
Это любопытно.
Самое любопытное — что у вас делает List<string> lst = new List<string>(); для чего это ?
Что можно класть в string? Впрочем, у меня даже вопросы неумелые.
Это любопытно.
Самое любопытное — что у вас делает List<string> lst = new List<string>(); для чего это ?
Что можно класть в string? Впрочем, у меня даже вопросы неумелые.
List<string> lst = new List<string>(); - это список, временный буфер для строк из таблици.
Цикл берет новую строку из таблици
var cells = table.GetCell("A", i)+table.GetCell("B", i);
и проверяет список lst функцией lst.Contains(cells) на наличие этой строки в списке
если есть вхождение, то это дубль и удаляет эту строку из таблици функцией table.DeleteRow(i);
в ином случае добавляет эту строку в буферный список lst.Add(cells);