Стоит ли переписывать следующую конструкцию «Словарь» с использованием Linq и как? - PullRequest
0 голосов
/ 22 августа 2011

Например, я не знаю, является ли хорошей практикой использование Linq всегда, когда это возможно.

     Class Aclass : Dictionary<string,int>
     {
        public Aclass(Aclass myAclass, HashSet<string> blacklist)
        {
            foreach (var item in myAclass)
            {
                if ((item.Value > 0) && (!blacklist.Contains(item.Key)))
                {
                    Add(item.Key, item.Value);
                }
            }
         }
      }

Ответы [ 3 ]

4 голосов
/ 22 августа 2011

Мне кажется, что с тобой все будет в порядке:

Dictionary<string, int> other = ...;
HashSet<string> blacklist = ...;

var dictionary = other.Where(item => item.Value > 0 && 
                                     !blackList.Contains(item.Key)
                      .ToDictionary(item => item.Key, item => item.Value);

Насколько я понимаю, вообще не нужен отдельный тип - производные от Dictionary<,> или List<> почтивсегда плохая идея ИМО.

1 голос
/ 22 августа 2011

Вы можете использовать linq для этого:

myAclass.Where(item => item.Value > 0 && !blacklist.Contains(item.Key))
        .ToList().ForEach(item => Add(item.Key, item.Value);
0 голосов
/ 22 августа 2011

Вы можете попробовать следующим образом:

public class Aclass : System.Collections.Generic.Dictionary<string, int>
{
    public Aclass(Aclass myAclass, System.Collections.Generic.HashSet<string> blacklist)
    {
        foreach (var item in myAclass)
        {
            int iCount = (from itemBlack in blacklist
                          where itemBlack == item.Key
                          select itemBlack)
                          .Count();

            if ((item.Value > 0) && (iCount == 0))
            {
                Add(item.Key, item.Value);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...