Изменение значений в очень большой коллекции (10 000) - PullRequest
2 голосов
/ 28 марта 2012

Я импортирую очень большой файл (2-3 ГБ текста) в коллекцию, 10000 за раз. Мне нужно применить определенные бизнес-правила к значениям, содержащимся в коллекции. Как лучше всего это сделать?

Первоначальной идеей было создать List<> пользовательского класса, но он становится очень тяжелым. Кроме того, я не уверен, как эффективно изменить значения в списке. Например, для всех элементов в списке, если свойство x имеет значение «abc», мне нужно изменить его на «xyz».

Предложения

Ответы [ 3 ]

5 голосов
/ 28 марта 2012

Использование List<T> должно быть абсолютно нормально.Если вам когда-либо понадобится итерация, вы можете захотите использовать LinkedList<T>, но я ожидаю, что IO затмит все остальное здесь.*

foreach (var item in list)
{
    if (item.Property == "abc")
    {
        item.Property = "xyz";
    }
}

... почти так же просто читать, как кажется, ИМО.Вы можете использовать List<T>.ForEach, если вы действительно хотите, или LINQ - но я обычно не люблю изменять значения в результате запроса, если это изменит результат.Например:

// I dislike doing this, though it would work:
foreach (var item in list.Where(x => x.Property == "abc"))
{
    item.Property = "xyz";
}
3 голосов
/ 28 марта 2012

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

0 голосов
/ 28 марта 2012

Я бы посоветовал вам использовать базу данных в памяти, это поможет вам эффективно выполнять операции выборки и обновления.Результирующий код будет проще поддерживать, так как вы будете использовать декларативную логику, а не императивную логику.Пожалуйста, сделайте это, если это ваш проект на вашем рабочем месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...