2009-04-01 3 views
0

У меня довольно сложная структура данных. Простая версия выглядит так:Извлечение элемента из списка - C#

public class Field 
{ 

    List<FieldRow> fieldRow; 

    //I want to write a delete that iterates and deletes given the key 
    //(Use Linq?) 
    public void DeleteByKey(int key) 
    { 
    //Do Remove 
    } 
} 

public class FieldRow 
{ 
    public int key; 
} 

Любая помощь по внедрению Delete оценивается.

ответ

3

List<T>().RemoveAll() будет делать то, что вы хотите.

Вы даете это Predicate тип делегата, который выполняется для каждого элемента, как, где положение:

fieldRow.RemoveAll(item => item.Key == key); 

Однако, вы можете рассмотреть вопрос о сохранении данных в Dictionary<int, FieldRow>. Таким образом, вы можете получить доступ к словарю/карте напрямую с помощью ключа. Это улучшит производительность.

+0

Вы действительно не хотите называть его в * новом * списке, хотя ... fieldRow.RemoveВсе есть то, что вы имеете в виду , Я думаю :) –

+0

Упс, хорошо пятнистый. Это то, что я получаю для переключения на VS, чтобы получить синтаксическую раскраску и intellisense! –

7
public class Field 
{ 
    List<FieldRow> fieldRow; 

    public void DeleteByKey(int key) 
    { 
    fieldRow.RemoveAll(row => key == row.key); 
    } 
} 

public class FieldRow 
{ 
    public int key; 
} 
1

Вы можете найти индекс поля, который необходимо удалить, и использовать метод RemoveAt в списке.

Я добавлю пример через минуту. Nevermind, предложение использовать RemoveAll с предикатом кажется лучшим вариантом :-)

Смежные вопросы