Как игнорировать элементы List <T>внутри словаря <K, List <T>> в c # - PullRequest
0 голосов
/ 30 мая 2019

Я должен игнорировать элементы (Список), тип продукта которых не содержится в данной строке, которая находится внутри словаря.

Я попытался выполнить итерацию словаря в цикле foreach и проверить тип продукта внутрицикл, и он работает нормально, но я хотел бы использовать без итерации, есть ли способ достичь этого?

private ConcurrentDictionary<string, List<PAAMsg>> FilterAllowedProductsTrades(ConcurrentDictionary<string, List<PAAMsg>> allPAA)
{
    ConcurrentDictionary<string, List<PAAMsg>> newPAA = new ConcurrentDictionary<string, List<PAAMsg>>();
    string productType = "BFO,BFT,BOND FWD,CAP,FEE,FEX,FRA,FUT,FxFUT,MFO,SWP,OFT,SWT";

    foreach (var item in allPAA)
    {
        newPAA.TryAdd(
            item.Key, 
            item.Value.FindAll((x => productType.Split(',').Contains(x.ProductType)))
        .ToList());
    }
    return newPAA;
}

Я хочу избежать итерации ниже и должен быть в одной строке.

foreach (var item in allPAA)
{
    newPAA.TryAdd(
        item.Key, 
        item.Value.FindAll((x => productType.Split(',').Contains(x.ProductType))).ToList());
}

1 Ответ

3 голосов
/ 30 мая 2019

Я не думаю, что возможно избежать цикла, LINQ просто похоронит его за его синтаксисом. Так что это вопрос предпочтений.

Одна из возможных альтернатив выглядит следующим образом:

private ConcurrentDictionary<string, List<PAAMsg>> FilterAllowedProductsTrades(ConcurrentDictionary<string, List<PAAMsg>> allPAA)
{
    string productType = "BFO,BFT,BOND FWD,CAP,FEE,FEX,FRA,FUT,FxFUT,MFO,SWP,OFT,SWT";
    var productTypes = productType.Split(',');

    var enumeration = allPAA.ToDictionary(
            x => x.Key, 
            x => x.Value.Where(p => productTypes.Contains(p.ProductType)).ToList());

    return new ConcurrentDictionary<string, List<PAAMsg>>(enumeration);
}

Также я бы предложил вывести операцию Split из цикла.

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