如何在arraylist中找不到重复值

时间:2010-12-30 15:59:26

标签: c#

我有一个arraylist,其值有些重复。我需要重复值的计数。这可能在c#中吗?

8 个答案:

答案 0 :(得分:3)

如果您的对象已正确覆盖等于方法,则只需从Distinct()命名空间调用System.Linq

它要求ArrayList是同构的,并在Cast<YourType>()之前调用Distinct()

然后从Distinct序列中减去arrayList的长度。

arraList.Count - arraList.Cast<YourType>().Distinct().Count()

如果您在arrayList中的项目不是YourType类型,它会抛出异常,如果您使用OfType<YourType>,它会将项目过滤到YourType类型的对象。

但是如果你想要每个重复项目的计数,这不是你的答案。

答案 1 :(得分:3)

here是一篇很棒的文章,如何使用LINQ

var query =
    from c in arrayList
    group c by c into g
    where g.Count() > 1
    select new { Item = g.Key,  ItemCount = g.Count()};

foreach (var item in query)
{
    Console.WriteLine("Country {0} has {1} cities", item.Item , item.ItemCount );
}

答案 2 :(得分:3)

public Dictionary<T,int> CountOccurences<T>(IEnumerable<T> items) {
  var occurences = new Dictionary<T,int>();
  foreach(T item in items) {
    if(occurences.ContainsKey(item)) {
      occurences[item]++;
    } else {
      occurences.Add(item, 1);
    }
  }
  return occurences;
}

答案 3 :(得分:2)

myList.GroupBy(i => i).Count(g => g.Count() > 1)

如果您特别需要ArrayList

ArrayList arrayList = new ArrayList(new[] { 1, 1, 2, 3, 4, 4 });
Console.WriteLine(arrayList.ToArray().GroupBy(i => i).Count(g => g.Count() > 1));

根据海报评论

ArrayList arrayList = new ArrayList(new[] { 1, 1, 2, 3, 4, 4 });
Console.WriteLine(arrayList.ToArray().Count(i => i == 4));

答案 4 :(得分:1)

int countDup = ArrayList1.Count - ArrayList1.OfType<object>().Distinct().Count();

答案 5 :(得分:0)

var items = arrayList.Cast<object>()
  .GroupBy(o => o)
  .Select(g => new { Item = g, Count = g.Count() })
  .ToList();

每个结果列表项都有两个属性: 物品 - 来源物品 计数 - 计入源列表

答案 6 :(得分:0)

你可以对它进行排序,然后变得非常容易。

编辑:当这样做时,排序变得没有实际意义。

Arraylist myList = new ArrayList();

myList = someStuff;
Dictionary<object, int> counts = new Dictionary<object,int>();
foreach (object item in myList)
{
    if (!counts.ContainsKey(item))
    {
       counts.Add(item,1);
    }
    else
    {
       counts[item]++;
    }

}

编辑:

一些小的事情可能会有所不同(对于我的一些方括号不确定,我对c#有点生疏)但这个概念应该经得起审查。

答案 7 :(得分:0)

你可以通过这么多方式来实现。第一个问题是按数组列表中的值进行分组,并且只返回超过1的分组计数。

ArrayList al = new ArrayList();
al.Add("a");
al.Add("b");
al.Add("c");
al.Add("f");
al.Add("a");
al.Add("f");

int count = al.ToArray().GroupBy(q => q).Count(q=>q.Count()>1);

count将返回值{2 af重复。