Re[11]: удаление элементов ArrayList
От: Wile  
Дата: 09.11.04 09:25
Оценка:
Здравствуйте, Сантехник, Вы писали:

С>Здравствуйте, Wile, Вы писали:


W>>Похоже по скорости выполнения ты прав,

W>>но вариант c IComparer'ом уж больно тяжеловат, а так хочется покороче...

С>Чем тяжеловат?


Компарером. Его писать надо. В итоге коду больше.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[12]: удаление элементов ArrayList
От: Сантехник Беларусь  
Дата: 09.11.04 09:30
Оценка:
Здравствуйте, Wile, Вы писали:

W>Компарером. Его писать надо. В итоге коду больше.


Хе, ну дык тут стандартный выбор между производительностью и универсальностью.
Хотя для обсуждаемой задачи компарер пишется за 3 секи.
... << RSDN@Home 1.1.4 beta 3 rev. 225>>
Re[13]: удаление элементов ArrayList
От: Wile  
Дата: 09.11.04 09:40
Оценка:
W>>Компарером. Его писать надо. В итоге коду больше.

С>Хе, ну дык тут стандартный выбор между производительностью и универсальностью.

С>Хотя для обсуждаемой задачи компарер пишется за 3 секи.

Да это ясно, что за 3 секи, интересно просто, можно ли обойтись без компарера, и вообще без копирования
... << Rsdn@Home 1.1.4 beta 1 >>
Re: удаление элементов ArrayList
От: TK Лес кывт.рф
Дата: 09.11.04 10:10
Оценка:
Hello, "DEMON HOOD"
>
> может нужно не ArrayList использовать?

Скачай CodeSmith там есть готовые шаблоные по которым можно сгенерировать полностью типизированные аналог ArrayList для того-же int.
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: удаление элементов ArrayList
От: ie Россия http://ziez.blogspot.com/
Дата: 09.11.04 15:50
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Такой вопрос —


DH>есть набор элементов с которыми нужно работать,

DH>пусть это будут случайные числа
DH>использую ArrayList т.к удобно динамически увеличивать размерность массива,
DH>но мне нужно также и удалять значения, например удалять все четные числа
DH>ниже приведен примерный кусок кода, мне он не нравится, т.к нужно использовать
DH>дополнительный массив, может нужно не ArrayList использовать?

Может тогда заюзать такой Comparer:

    public class OddEvenComparer : IComparer
    {
        public int Compare(object x, object y)
        {
            if ((int)x % 2 == (int)y % 2)
            {
                return 0;
            }
            else
            {
                return ((int)x % 2 == 0) ? 1 : -1;
            }
        }
    }


Отсортировать массив используя данный компарер. Т.о. получим массив в котором все четные в конце. И удалить этот конец.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Превратим окружающую нас среду в воскресенье.
Re[2]: удаление элементов ArrayList
От: DEMON HOOD  
Дата: 09.11.04 20:00
Оценка:
Здравствуйте, kondrat_kiev, Вы писали:


_>А если использовать следующий код:

_>
_>public void DeleteEvenNumbers(ArrayList myArray)
_>{
_>    for(int i=0; i<myArray.Count; i++ )
_>    {
_>        if (myArray[i]%2 == 0)
_>        {
_>            myArray.RemoveAt(i);
_>        }
_>    }
_>}
_>

Спасибо!
именно это мне и посоветовали ЗДЕСЬ
Автор: AndrewVK
Дата: 09.11.04

дело в том что в МСДН для перебора элементов везде используют энумератор, что то вроде навязчивой рекламы...
Поэтому простейший способ вылетел из головы....
... <<silent Rsdn@Home 1.1.4 beta 1 Windows XP 5.1.2600.0 >>
Re[7]: удаление элементов ArrayList
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 09:50
Оценка:
Здравствуйте, Сантехник, Вы писали:

W>>А как тогда с точки зрения "good-practice" удалять из коллекции элементы в зависимости от условия, накладываемого на элементы этой же коллекции?


А ты вкурсе насколько твое вариант медленнее? Конечно любая модификация переменных чревата ошибками, но не до маразма же доводить? Эдак проще переходить на функциональные языки. Там как раз поощрается такой стиль.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: удаление элементов ArrayList
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 09:50
Оценка:
Здравствуйте, Wile, Вы писали:

W>Да это ясно, что за 3 секи, интересно просто, можно ли обойтись без компарера, и вообще без копирования


Перебирай в цикле и копируй в другой массив. А массовые удаления из середины действительно чреваты. Правдо, если удалений немного или они приемущественно сзади, то все эти компареты и полиморфные методы перебора тоже к тормозам приведут.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: удаление элементов ArrayList
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 09:50
Оценка:
Здравствуйте, Сантехник, Вы писали:


С>Можно пробегать по исходному списку и нужные элементы, т.е. те, которые не надо удалять, копировать в новый список, типа

С>
С>IList FilterList(IList sourceList, IComparer criteria)
С>


И если нужно будет удалять небольшое количество элементов из большого списка, то будет явно не быстро.

Тут как бы универсальных решений быть не может. Вернее конечно может, но специализированное будет всегда эффективнее.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: удаление элементов ArrayList
От: Сантехник Беларусь  
Дата: 10.11.04 10:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А ты вкурсе насколько твое вариант медленнее? Конечно любая модификация переменных чревата ошибками, но не до маразма же доводить? Эдак проще переходить на функциональные языки. Там как раз поощрается такой стиль.


В обсуждаемом случае медленнее, не спорю, но если брать general-case, то имхо допустимо.
... << RSDN@Home 1.1.4 beta 3 rev. 225>>
Re[2]: удаление элементов ArrayList
От: Аноним  
Дата: 10.11.04 10:17
Оценка: +1
Здравствуйте, kondrat_kiev, Вы писали:

_>А если использовать следующий код:

_>
_>public void DeleteEvenNumbers(ArrayList myArray)
_>{
_>    for(int i=0; i<myArray.Count; i++ )
_>    {
_>        if (myArray[i]%2 == 0)
_>        {
_>            myArray.RemoveAt(i);
_>        }
_>    }
_>}
_>

Так нельзя. Проверьте на любом примере — пропустит половину элементов. Здесь, скорее, подошло бы что-то вроде while.
Re[3]: удаление элементов ArrayList
От: Сантехник Беларусь  
Дата: 10.11.04 10:34
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Так нельзя. Проверьте на любом примере — пропустит половину элементов. Здесь, скорее, подошло бы что-то вроде while.


Так нет, но если после кажного удаления откатывать счетчик, то сработает.
... << RSDN@Home 1.1.4 beta 3 rev. 225>>
Re[9]: удаление элементов ArrayList
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 11:08
Оценка:
Здравствуйте, Сантехник, Вы писали:

С>В обсуждаемом случае медленнее, не спорю, но если брать general-case, то имхо допустимо.


Да нет, я даже не ставлю под сомнение допустимость. Просто без оговорок такие предложения могут привести к несколько извращенному применению.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.