Удалить экземпляры из списка при помощи LINQ или Лямбды?

Просто используйте text-shadow, чтобы добавить рамку вокруг вашего значка галочки. Кроме того, вы можете улучшить читабельность, увеличив размер значков значков.


Просмотрите приведенный ниже фрагмент кода для практического примера использования text-shadow и увеличения размера значка:

    p:nth-child(1) span {color:green; text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; font-size: 50px;}

    p:nth-child(2) span {color:yellow; text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}
<p>I will display <span>&#10004;</span></p>
<p>I will display <span>&#x2714;</span></p>

28
задан Milad Rashidi 16 December 2017 в 20:55
поделиться

6 ответов

Вы можете использовать метод RemoveAll :

MyClass one; //initialize MyClass
list.RemoveAll(item => one.Value1 == item.Value1 && one.Value2 < item.Value2);
41
ответ дан Francis B. 28 November 2019 в 02:40
поделиться

Если я правильно понял вопрос, создать уникальный набор из двух списков.

Для этого вы можете использовать следующие

Список списков1; Список list2;

Список list3 = list1.Except (list2)

Список 3 будет содержать уникальные элементы.

5
ответ дан 28 November 2019 в 02:40
поделиться
foreach(var item in toBeRemovedLItems) {   
   list.RemoveAll(one => one.Value1 == item.Value1 && one.Value2 < item.Value2); 
}

Слишком поздно снова. Ну хорошо.

2
ответ дан Richard Anthony Hein 28 November 2019 в 02:40
поделиться

Может быть, вы пытаетесь сделать что-то подобное?

List<T> firstList;
List<T2> toBeRemovedItems;
List<T> finalList;

foreach(T item in firstList)
{
    toBeRemovedItems = CheckIfWeRemoveThisOne(item.Number, item.Id);
    if (toBeRemovedItems == null && toBeRemovedItems.Count() == 0)
        finalList.Add(item);
}

Вот как мне удалось решить проблему с избавлением от дубликатов между List<ViewModel> и List<Model>. Я использовал функцию CheckIfWeRemoveThisOne, чтобы проверить, принадлежит ли item.Number какому-либо другому элементу, используя идентификатор в качестве определяющей характеристики. Если он нашел другой элемент (дубликат), а не пытался удалить его из первоначального списка (который я получал обратно List<Model>, и мне сначала дали List<ViewModel> в моей функции, поэтому у меня были сомнения что касается того, как я мог это сделать, так или иначе), я просто построил новый список - добавив в него результат, если он окажется нормальным.

0
ответ дан vapcguy 28 November 2019 в 02:40
поделиться

You can use LINQ's Where method to filter out values that should not be a part of the list. The result is an IEnumerable with the elements removed.

var res = list.Where(item => !(one.Value1 == item.Value1 && one.Value2 < item.Value2));

This will not updated the original List instance but instead will create a new IEnumerable with the values removed.

21
ответ дан 28 November 2019 в 02:40
поделиться

Я согласен с предложением Джареда отфильтровать определенные элементы, но похоже, что соединение на Value1 было бы более эффективным подходом:

var res = from item1 in list
          join item2 in toBeRemovedList
            on item1.Value1 equals item2.Value1
          where item1.Value2 >= item2.Value2
          select item1;

Обновление: По-видимому, мне не удается понять прочитанное - новый подход:

var removeDict = toBeRemovedList.ToDictionary(i => i.Value1, i => i.Value2);
list.RemoveAll(item => {
    int itemToRemoveValue2;
    if(removeDict.TryGetValue(item.Value1, out itemToRemoveValue2))
        return item.Value2 < itemToRemoveValue2;
    return false;
});

Конечно, было бы еще лучше, если бы ваш список, который нужно удалить, можно было бы начать как словарь. В конечном счете, мы просто пытаемся сделать наш матч по Value1 более эффективным.

4
ответ дан 28 November 2019 в 02:40
поделиться
Другие вопросы по тегам:

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