Как я перемещаю объекты от списка до другого списка в C#?

Вы должны учитывать из своего кода Fragment:

1) Реализовать onCreateOptionsMenu(Menu menu, MenuInflater inflater)

2) Вызвать setHasOptionsMenu

3) И также внедрить onOptionsItemSelected(MenuItem item)

Тогда вы будете в порядке как на телефоне, так и на планшете.

26
задан Sinan Ünür 22 June 2009 в 20:37
поделиться

5 ответов

Я бы попробовал ответить @ Mehrdad и, возможно, протестировал бы его на этом тоже ...

var selected = items.Where(item => item.Something > 10).ToList();
selected.ForEach(item => items.Remove(item));
otherList.AddRange(selected);
19
ответ дан 28 November 2019 в 07:16
поделиться

Я предлагаю:

var selected = items.Where(item => item.Something > 10).ToList();
items = items.Except(selected).ToList();
otherList.AddRange(selected);
12
ответ дан 28 November 2019 в 07:16
поделиться

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

Я бы поставил условие прямо в параметр RemoveAll:

items.RemoveAll(item => item.something > 10);

Если вы сделаете это и не измените остальную часть кода, произойдет дублирование кода. , что не очень хорошо. Чтобы этого избежать, я бы сделал следующее:

Func<ItemType, bool> selectedCondition = (item => item.something > 10);

otherList.AddRange(items.Where(selectedCondition));

items.RemoveAll(new Predicate<ItemType>(selectedCondition));
7
ответ дан 28 November 2019 в 07:16
поделиться

Как насчет раздела:

int[] items = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var partition = items.ToLookup(x => x > 5);
var part1 = partition[true];
var part2 = partition[false];
1
ответ дан 28 November 2019 в 07:16
поделиться

Это довольно плохо с точки зрения производительности - он фактически перечисляет запрос n раз (для n элементов в элементах ). Было бы лучше, если бы вы построили (например) HashSet элементов, которыми нужно манипулировать.

Чтобы дать простой пример только со значениями int :

    var items = new List<int> { 1, 2, 3, 4, 5, 6 };
    var otherList = new List<int>();
    var selected = new HashSet<int>(items.Where(
        item => item > 3));
    otherList.AddRange(selected);
    items.RemoveAll(selected.Contains);
6
ответ дан 28 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: