我有一个arraylist,其值有些重复。我需要重复值的计数。这可能在c#中吗?
答案 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 a
,f
重复。