C # Словарь ArrayList Count - PullRequest
       6

C # Словарь ArrayList Count

4 голосов
/ 19 мая 2011

Есть ли простой способ подсчитать значения ключей определенных словарей?

static void Main()
{
    Dictionary<string, ArrayList> SpecTimes = new Dictionary<string, ArrayList>;
    ArrayList times = new ArrayList();
    string count = "";

    times.Add = "000.00.00";
    times.Add = "000.00.00";
    times.Add = "000.00.00";

   string spec = "A101";

   SpecTimes.Add(spec,times);

   count = SpecTimes[spec].values.count;
}

Ответы [ 5 ]

4 голосов
/ 19 мая 2011

Я не проверял, но это должно быть близко к тому, что вам нужно.

static void Main()
{
  Dictionary<string, List<string>> SpecTimes = new Dictionary<string, List<string>>();
  List<string> times = new List<string>();
  int count = 0;

  times.Add = "000.00.00";
  times.Add = "000.00.00";
  times.Add = "000.00.00";

  string spec = "A101";

  SpecTimes.Add(spec,times);

  // check to make sure the key exists, otherwise you'll get an exception.
  if(SpecTimes.ContainsKey(spec))
  {
      count = SpecTimes[spec].Count;
  }
}
3 голосов
/ 19 мая 2011

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

static void Main()
{
    IDictionary<string, IList<string>> specTimes = new Dictionary<string, IList<string>>();
    IList<string> times = new List<string>();

    times.Add("000.00.00");
    times.Add("000.00.00");
    times.Add("000.00.00");

    string spec = "A101";
    specTimes.Add(spec, times);

    int count = specTimes[spec].Count;
}

Так как у вас уже есть количество случаев, в чем проблема?

2 голосов
/ 19 мая 2011

Ваш код не будет компилироваться как есть, и вы не должны использовать ArrayList, а скорее List<T> (как указывал SLaks). При этом List<T> имеет свойство Count, поэтому SpecTime[key].Count должно работать нормально (при условии, что ключ на самом деле находится в словаре.)

1 голос
/ 19 мая 2011

Если вы используете .NET 3.5, вы можете использовать Linq для фильтрации и подсчета. Однако по возможности избегайте ArrayList и используйте обобщенные значения.

    static void Main(string[] args)
    {
        Dictionary<string, List<string>> SpecTimes = new Dictionary<string, List<string>>();
        List<string> times = new List<string>();
        int count;

        times.Add("000.00.00");
        times.Add("000.00.00");
        times.Add("000.00.00");
        times.Add("000.00.01");

        string spec = "A101";

        SpecTimes.Add(spec,times);

        // gives 4
        count = SpecTimes[spec].Count;

        // gives 3
        count = (from i in SpecTimes[spec] where i == "000.00.00" select i).Count();

        // gives 1
        count = (from i in SpecTimes[spec] where i == "000.00.01" select i).Count();
    }
1 голос
/ 19 мая 2011

Если вы используете .NET 3.5 и выше, используйте Linq для этого:

var count = (from s in SpecTimes where SpecTimes.Key == <keyword> select s).Count();

в любом случае, как все предложили, вы должны выбрать List<string> вместо ArrayList

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