C# 字典数组列表计数
本文关键字:列表 数组 字典 | 更新日期: 2023-09-27 17:57:03
有没有一种简单的方法来计算特定字典键值的值?
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;
}
我还没有测试过它,但这应该接近你需要的。
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;
}
}
你的代码中有一些错误,所以无论如何它都不会编译。你应该像这样改变它:
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;
}
既然你已经得到了发生次数,那到底有什么问题呢?
你的代码不会按原样编译,你不应该使用ArrayList,而是List<T>
(正如SLaks指出的那样)。话虽如此,List<T>
有一个Count
属性,所以SpecTime[key].Count
应该可以正常工作(假设键实际上在字典中)。
如果您使用的是 .NET 3.5 及更高版本,请使用 Linq 来实现此目的:
var count = (from s in SpecTimes where SpecTimes.Key == <keyword> select s).Count();
无论如何,正如每个人都建议的那样,您应该选择List<string>
而不是ArrayList
如果使用
.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();
}