Как искать в Списке <string>предметов - PullRequest
1 голос
/ 22 сентября 2011

У меня есть список, и он заполнен такими строками:

List<string> data = new List<string>();
data.Add(itemType +  "," + itemStock + "," + itemPrice);

Таким образом, в основном есть 3 строковые переменные, разделенные запятой.

Теперь я хочу поискать в этомперечислите и удалите элементы определенного типа.То есть мне нужно искать, какие элементы моего списка начинаются с нужного «itemType».

Спасибо.

Ответы [ 5 ]

6 голосов
/ 22 сентября 2011

Чтобы ответить на вопрос в заголовке («Как искать ...»), возвращается IEnumerable<string> с нужными элементами:

var itemsToRemove = data.Where(x => x.StartsWith(specificItemType + ","));

Чтобы ответить на вопрос в теле вашего вопроса, вы можете использовать List(T).RemoveAll для удаления пунктов:

data.RemoveAll(x => x.StartsWith(specificItemType + ","));

Однако я бы посоветовал вам переосмыслить структуру данных. Попробуйте создать класс Item:

public class Item {
    public string Type { get; set; }    
    public int Stock { get; set; }    
    public decimal Price { get; set; }

    public override string ToString() {
        return itemType +  "," + itemStock + "," + itemPrice;
    }
}

Затем добавьте эти структуры данных в свой список:

List<Item> data = new List<Item>();
data.Add(new Item {Type = itemType, Stock = itemStock, Price = itemPrice});

Затем вы можете искать, читать, переформатировать и т. Д., Не прибегая к манипуляции со строками:

data.RemoveAll(x => x.Type == specificItemType);
2 голосов
/ 22 сентября 2011
var typematch = data.Where(t => t.StartsWith(itemType)).ToList();

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

2 голосов
/ 22 сентября 2011
var matches = data.Where(d => d.StartsWith(itemType));

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

data.RemoveAll(d => d.StartsWith(itemType));
1 голос
/ 22 сентября 2011

Настройка данных

List<string> data = new List<string>(); 
data.Add("Type1" + "," + "A" + "," + "A");
data.Add("Type2" + "," + "B" + "," + "B");    
string typeToExclude = "Type2";
int typeIndex = 0;

Сама фильтрация

var items = data.Where(
                  x => x.Split(new char[] {','})[typeIndex] != typeToExclude);
0 голосов
/ 22 сентября 2011

Вы хотите удалить их из списка, чтобы ...

data.RemoveAll(x => x.StartsWith(itemType));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...