Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.12.21;
Скачать: [xml.tar.bz2];

Вниз

удалить из списка не дубликаты   Найти похожие ветки 

 
TheOwl   (2013-12-05 10:49) [0]

Есть отсортированный список (TStringList) значений:

1
1
2
3
3
4
5

Задача: оставить в списке только цепочки значений (т.е. удалить не дубликаты). Как максимально быстро это сделать (за один проход)?


 
Palladin ©   (2013-12-05 11:22) [1]

"удалить не дубликаты" это что остаться то должно? 2, 4 и 5 ?


 
brother ©   (2013-12-05 11:26) [2]

идем по списку, если текущее значение не равно предыдущему или следующему, то удаляем его...


 
Ega23 ©   (2013-12-05 11:27) [3]


> "удалить не дубликаты" это что остаться то должно? 2, 4
> и 5 ?

скорее, 1, 1, 3, 3


 
TheOwl   (2013-12-05 11:27) [4]


> "удалить не дубликаты" это что остаться то должно? 2, 4
> и 5 ?


остаться должно:

1
1
3
3


 
Ega23 ©   (2013-12-05 11:27) [5]


> идем по списку, если текущее значение не равно предыдущему
> или следующему, то удаляем его...


Угу. Только во избежание - идём с конца списка.


 
Ega23 ©   (2013-12-05 11:28) [6]

for i := list.Count - 1 downto 0 do
begin
 if твоё_условие then
   Delete(i);
end;


 
TheOwl   (2013-12-05 11:29) [7]


> идем по списку, если текущее значение не равно предыдущему
> или следующему, то удаляем его...


ну я вообщем-то так и сделал. иду с конца, текущее значение сравниваю с предыдущим, если не равно, удаляю текущее.


 
brother ©   (2013-12-05 11:29) [8]

те
if m[n]<>m[n-1] and m[n]<>m[n+1] then
 удалить m[n]
else inc(n)


 
brother ©   (2013-12-05 11:30) [9]

> иду с конца

надо сначала, ибо при удалении могут получиться еще цепочки или этого не надо?


 
Ega23 ©   (2013-12-05 11:32) [10]


> else inc(n)


С конца надо идтить. Посмотри реализацию Delete.


 
brother ©   (2013-12-05 11:33) [11]

[9]?


 
Ega23 ©   (2013-12-05 11:37) [12]


> [9]?


А как?


 
Медвешоног Порожог   (2013-12-05 11:38) [13]

взять текст от стринглиста и регуляркой зареплейсить


 
jack128_   (2013-12-05 11:59) [14]


> А как?

Если список сортированный, то никак.


 
Плохиш ©   (2013-12-05 12:31) [15]


 int[] arr = {1, 1, 2, 3, 3, 4, 5};
 arr = arr.Where(a => (arr.Where(a2 => a2 == a).Select( a2 => a2).Count()) > 1).Select(a => a).ToArray();

:-))


 
Sha ©   (2013-12-05 16:15) [16]

 n:=0;
 for i:=sl.Count-2 downto 0 do
   if sl[i]=sl[i+1] then inc(n)
   else if n>0 then n:=0
   else sl.Delete(i+1);
 if (n=0) and (sl.Count>0) then sl.Delete(0);


 
Sha ©   (2013-12-05 16:18) [17]

не то удалил ))


 
Sha ©   (2013-12-05 16:30) [18]

попытка номер 2

 n:=0;
 for i:=sl.Count-2 downto 0 do
   if sl[i]=sl[i+1] then begin; inc(n); sl.Delete(i+1); end
   else if n>0 then begin; n:=0; sl.Delete(i+1); end;    
 if (n>0) and (sl.Count>0) then sl.Delete(0);


 
DevilDevil ©   (2013-12-05 17:28) [19]

> TheOwl   (05.12.13 10:49)

удалить за один проход можно.
но связываться с TStringList, и TList - не очень быстро
а у тебя ещё и судя по всему строки

поэтому уточни, насколько быстро тебе нужно
и какие типы используются для списка/элемента


 
turbouser ©   (2013-12-05 18:13) [20]

Дожили...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2014.12.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.002 c
15-1400304929
Антоха
2014-05-17 09:35
2014.12.21
Ошибка "сервер Rpc не доступен"


2-1386226163
TheOwl
2013-12-05 10:49
2014.12.21
удалить из списка не дубликаты


2-1386138564
Fan
2013-12-04 10:29
2014.12.21
Отображение вибрации в делфи


2-1386312700
Dmitry123
2013-12-06 10:51
2014.12.21
перевод координат


1-1329071444
Proger254
2012-02-12 22:30
2014.12.21
Вызов функции чужого приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский