确定集合中 属性 的不同值的数量
Determine number of different values for a property in a collection
我有一个通用类型列表 List<TypeA> list1
,其中 TypeA
包含一个枚举类型。
我想知道最有效和最简单的搜索方法 list1
获取枚举类型的不同值的数量。
集合中没有出现内置方法。
示例代码如下:
using System;
using System.Collections.Generic;
namespace space
{
enum TypeEnum { E1, E2}
public class Class1
{
public TypeEnum Eobj { get; set; }
public double doubObj { get; set; }
public Class1()
{
doubObj = 0.0;
Eobj = TypeEnum.E1;
}
public Class1(double doubObjIn, TypeEnum EobjIn)
{
doubObj = doubObjIn;
Eobj = EobjIn;
}
}
public static void Main()
{
List<Class1> list1 = new List<Class1>();
Class1 o1 = new Class1(1, TypeEnum.E1);
Class1 o2 = new Class1(2, TypeEnum.E1);
Class1 o3 = new Class1(3, TypeEnum.E2);
list1.Add(o1);
list1.Add(o2);
list1.Add(o3);
// trying this only counts distinct objects of Class1 not of Enum Types
var count = list1.Distinct().Count();
}
}
您可以使用 Distinct
方法轻松实现此目的。
使用您的代码,您只需要一个额外的 Select
调用来选择枚举值。
List<Class1> list1 = new List<Class1>();
Class1 o1 = new Class1(1, TypeEnum.E1);
Class1 o2 = new Class1(2, TypeEnum.E1);
Class1 o3 = new Class1(3, TypeEnum.E2);
list1.Add(o1);
list1.Add(o2);
list1.Add(o3);
var count = list1.Select(o => o.Eobj).Distinct().Count();
或者,您可以覆盖 Class1
class 中的 Equals
和 GetHashCode
方法,这样 Distinct
就可以在您的代码段中使用,而无需 Select
.
我有一个通用类型列表 List<TypeA> list1
,其中 TypeA
包含一个枚举类型。
我想知道最有效和最简单的搜索方法 list1
获取枚举类型的不同值的数量。
集合中没有出现内置方法。
示例代码如下:
using System;
using System.Collections.Generic;
namespace space
{
enum TypeEnum { E1, E2}
public class Class1
{
public TypeEnum Eobj { get; set; }
public double doubObj { get; set; }
public Class1()
{
doubObj = 0.0;
Eobj = TypeEnum.E1;
}
public Class1(double doubObjIn, TypeEnum EobjIn)
{
doubObj = doubObjIn;
Eobj = EobjIn;
}
}
public static void Main()
{
List<Class1> list1 = new List<Class1>();
Class1 o1 = new Class1(1, TypeEnum.E1);
Class1 o2 = new Class1(2, TypeEnum.E1);
Class1 o3 = new Class1(3, TypeEnum.E2);
list1.Add(o1);
list1.Add(o2);
list1.Add(o3);
// trying this only counts distinct objects of Class1 not of Enum Types
var count = list1.Distinct().Count();
}
}
您可以使用 Distinct
方法轻松实现此目的。
使用您的代码,您只需要一个额外的 Select
调用来选择枚举值。
List<Class1> list1 = new List<Class1>();
Class1 o1 = new Class1(1, TypeEnum.E1);
Class1 o2 = new Class1(2, TypeEnum.E1);
Class1 o3 = new Class1(3, TypeEnum.E2);
list1.Add(o1);
list1.Add(o2);
list1.Add(o3);
var count = list1.Select(o => o.Eobj).Distinct().Count();
或者,您可以覆盖 Class1
class 中的 Equals
和 GetHashCode
方法,这样 Distinct
就可以在您的代码段中使用,而无需 Select
.