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;
}

C# 字典数组列表计数

我还没有测试过它,但这应该接近你需要的。

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();
    }