首页 / C# / c# – 从自定义集合中检索项目
c# – 从自定义集合中检索项目
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 从自定义集合中检索项目,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2581字,纯文字阅读大概需要4分钟。
内容图文
![c# – 从自定义集合中检索项目](/upload/InfoBanner/zyjiaocheng/828/0c3a8bda96bf462da3158b3f862b1d27.jpg)
我有以下课程
public class People
{
public int id;
public string nameHash;
public string name;
}
我需要创建一个自定义集合,由类People的对象组成,它允许我通过其id和nameHash检索元素.该集合必须能够使用foreach迭代其元素:
foreach (People person in PeopleCollection) { ... }
我怎么做?如果你不能给出详细的答案,至少要给出一个简短的行动计划.提前致谢!
最佳答案:
如果您正在讨论大型集合,并且您希望基于整数Id或字符串NameHash字段进行更快的查找,同时仍支持foreach(foofollection中的Foo f)模式,那么您可以滚动自己的包含一对字典的集合.原油实施,未经过全面测试:
class Person
{
public int Id { get; private set; }
public string NameHash { get; private set; }
public string Name { get; private set; }
public Person(int id, string nameHash, string name)
{
Id = id;
NameHash = nameHash;
Name = name;
}
}
class People : IEnumerable<Person>
{
private Dictionary<int, Person> personDictionary = new Dictionary<int, Person>();
private Dictionary<string, int> hashIdMap = new Dictionary<string, int>();
public void Add(Person person)
{
if (person == null)
throw new ArgumentNullException("person");
if (personDictionary.ContainsKey(person.Id))
throw new InvalidOperationException("person Id is already referenced in collection.");
if (hashIdMap.ContainsKey(person.NameHash))
throw new InvalidOperationException("person NameHash is already referenced in collection.");
personDictionary.Add(person.Id, person);
hashIdMap.Add(person.NameHash, person.Id);
}
public Person this[int id]
{
get
{
if (!personDictionary.ContainsKey(id))
throw new ArgumentOutOfRangeException("Id is not in the collection.");
return personDictionary[id];
}
}
public Person this[string nameHash]
{
get
{
if (!hashIdMap.ContainsKey(nameHash))
throw new ArgumentOutOfRangeException("NameHash is not in the collection.");
return this[hashIdMap[nameHash]];
}
}
public IEnumerator<Person> GetEnumerator()
{
foreach (KeyValuePair<int, Person> pair in personDictionary)
yield return pair.Value;
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
…
static void Main()
{
Person personA = new Person(1, "A", "Apple");
Person personB = new Person(2, "B", "Banana");
Person personC = new Person(3, "C", "Cherry");
People people = new People();
people.Add(personA);
people.Add(personB);
people.Add(personC);
Person foo = people[1];
Person bar = people["C"];
Debug.Assert(foo.Name == "Apple");
Debug.Assert(bar.Name == "Cherry");
foreach (Person person in people)
Debug.WriteLine(person.Name);
}
当然,如果你正在处理小型集合,你可以简单地使用List< T>.并使用LINQ或已定义的Find方法.如
Person personA = collection.FirstOrDefault(p => p.Id == 42);
Person personB = collection.Find(p => p.NameHash == "Blah");
内容总结
以上是互联网集市为您收集整理的c# – 从自定义集合中检索项目全部内容,希望文章能够帮你解决c# – 从自定义集合中检索项目所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。