#c# #dictionary #arraylist
#c# #словарь #список массивов
Вопрос:
Есть ли простой способ подсчитать значения определенных словарных ключей values?
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;
}
Комментарии:
1. Это выглядит как половина C # и половина… Я не знаю.
2. Не используйте
ArrayList
s. Вместо этого используйтеList<T>
3. Почему вы смешиваете общие коллекции и не общие коллекции? И не использовать скобки в вызовах вашего метода? Пожалуйста, покажите реальный код.
Ответ №1:
Я не тестировал это, но это должно быть близко к тому, что вам нужно.
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;
}
}
Ответ №2:
В вашем коде есть некоторые ошибки, поэтому он все равно не будет компилироваться. Вы должны изменить это следующим образом:
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;
}
Поскольку вы уже получили количество вхождений, в чем проблема в любом случае?
Ответ №3:
Ваш код не будет компилироваться как есть, и вам не следует использовать ArrayList, а скорее List<T>
(как указал СЛакс).) При этом у List<T>
есть Count
свойство, поэтому SpecTime[key].Count
должно работать просто отлично (при условии, что ключ действительно находится в словаре.)
Комментарии:
1. Я знаю, что вы хотели сказать, что
Dictionary<TKey, TValue>
имеетCount
свойство.2. @Rick Это так, но почему это должно быть тем, что я имею в виду?
3. Чтение слишком быстрое. Mea culpa. (
SpecTime.Count
противSpecTime[key].Count
)
Ответ №4:
Если вы используете .NET 3.5 и выше, используйте Linq для этого:
var count = (from s in SpecTimes where SpecTimes.Key == <keyword> select s).Count();
в любом случае, как все предлагали, вам следует выбрать List<string>
вместо ArrayList
Ответ №5:
При использовании .NET 3.5 вы можете использовать Linq для фильтрации и подсчета. Однако по возможности избегайте ArrayList и используйте generics.
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();
}