Jac*_*Orr 6 c# linq list object
说我有一个包含这样的对象的列表:
public class Person
{
private string _name;
private string _id;
private int _age;
public Person
{
}
// Accessors
}
public class ManipulatePerson
{
Person person = new Person();
List<Person> personList = new List<Person>;
// Assign values
private void PopulateList();
{
// Loop
personList.Add(person);
// Check if every Person has a unique ID
}
}
Run Code Online (Sandbox Code Playgroud)
我想检查每个人都有一个唯一的ID.我想返回一个布尔值true/false,具体取决于ID是否唯一.这是我用LINQ可以实现的吗?
我会使用Distinct然后检查计数例如:
bool bAreAllPeopleUnique = (personList.Distinct(p => p.ID).Count == personList.Count);
Run Code Online (Sandbox Code Playgroud)
但是,正如@Ian所评论的那样,您需要在类中添加一个属性,Person以便您可以像这样访问Id:
public string ID
{
get { return _id; }
}
Run Code Online (Sandbox Code Playgroud)
实现这一目标的"更好"方法是添加如下方法:
private bool AreAllPeopleUnique(IEnumerable<Person> people)
{
return (personList.Distinct(p => p.ID).Count == personList.Count);
}
Run Code Online (Sandbox Code Playgroud)
注意:该方法IEnumerable不是列表,因此实现该接口的任何类都可以使用该方法.
请注意,您甚至可以直接利用HashSet<>:
var hs = new HashSet<string>();
bool areAllPeopleUnique = personList.All(x => hs.Add(x.Id));
Run Code Online (Sandbox Code Playgroud)
(并且是我通常使用的代码)
它的优点是在最好的情况下(存在一些重复项),它会在分析所有personList集合之前停止。
| 归档时间: |
|
| 查看次数: |
2724 次 |
| 最近记录: |