列表中不同对象类型的数量

jou*_*esm 3 c# list counting

我正在使用C#,Silverlight,Visual Studio for Windows Phone 7.

我目前有一个包含通用UIElement的List,我可以把TextBlock或Grid或StackPanel这样的东西放到List中.

例如:

List<UIElement> UIList= new List<UIelement>();
UIList.Add(someUIObject as UIElement);
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有一种有效的方法来计算列表中对象类型的数量?例如,如果有8个TextBlocks和4个Grids,我想知道List中有2个对象类型.或者,如果有1个TextBlock,1个Grid和1个StackPanel,我想知道有3种类型的对象.

我正在寻找比O(n ^ 2)性能更好的东西.我当前的解决方案将每个元素类型与List中的其他元素类型进行比较,类似于BubbleSort.

svi*_*ick 5

为了获得集合中不同类型的数量,我将使用LINQ首先选择每个对象的类型,然后只采用不同类型并计算:

int numberOfTypes = UIList.Select(x => x.GetType()).Distinct().Count();
Run Code Online (Sandbox Code Playgroud)

所有这些都是O(n),因为Distinct()使用哈希表.