代码之家  ›  专栏  ›  技术社区  ›  Haim Evgi

如何在c中声明像php array_count_值这样的函数?

  •  0
  • Haim Evgi  · 技术社区  · 14 年前

    我想在c中声明接受数组的函数 返回此数组的所有值的计数

    喜欢 array_count_values 在php中

    $array = array(1, 1, 2, 3, 3, 5 );
    
    return 
    
    Array
    (
        [1] => 2
        [2] => 1
        [3] => 2
        [5] => 1
    )
    

    有效的方法是什么?

    谢谢

    3 回复  |  直到 14 年前
        1
  •  4
  •   jason    14 年前
    int[] array = new[] { 1, 1, 2, 3, 3, 5 };
    var counts = array.GroupBy(x => x)
                      .Select(g => new { Value = g.Key, Count = g.Count() });
    foreach(var count in counts) {
        Console.WriteLine("[{0}] => {1}", count.Value, count.Count);
    }
    

    或者,你可以得到 Dictionary<int, int> 就像这样:

    int[] array = new[] { 1, 1, 2, 3, 3, 5 };
    var counts = array.GroupBy(x => x)
                      .ToDictionary(g => g.Key, g => g.Count());
    
        2
  •  1
  •   mellamokb Dan    14 年前

    编辑

    对不起,我发现我之前的回答不对。您需要计算每种类型的唯一值。

    可以使用字典存储值类型:

    object[] myArray = { 1, 1, 2, 3, 3, 5 };
    Dictionary<object, int> valueCount = new Dictionary<object, int>();
    foreach (object obj in myArray)
    {
        if (valueCount.ContainsKey(obj))
            valueCount[obj]++;
        else
            valueCount[obj] = 1;
    }
    
        3
  •  0
  •   Jesse    14 年前

    如果你想数数除整数以外的数,试试这个

    public static Dictionary<dynamic, int> Count(dynamic[] array) 
      {
    
       Dictionary<dynamic, int> counts = new Dictionary<dynamic, int>();
    
       foreach(var item in array) {
    
        if (!counts.ContainsKey(item)) {
         counts.Add(item, 1);
        } else {
         counts[item]++;
        }
    
    
       }
    
      return counts;    
      }