C# 是否有一个集合不仅可以按键查找项,还可以按项的属性查找项?
我正在努力找出在我的收藏中找到物品的最有效的方法。首先,这里有一些更多的信息/要求:C# 是否有一个集合不仅可以按键查找项,还可以按项的属性查找项?,c#,collections,C#,Collections,我正在努力找出在我的收藏中找到物品的最有效的方法。首先,这里有一些更多的信息/要求: 秩序并不重要 必须不使用枚举查找 集合将非常大,但在最初创建后不会进行修改 人口稠密 必须能够按键(字符串)查找,但也能够按项类型的两个属性之一查找 我目前正在使用一个自定义集合,该集合继承自KeyedCollection,它使用GetKeyForItem()从项中提取一个字符串,用作键,到目前为止还可以 问题在于我希望能够查找项目的方式。我的理解是,除了“dirty”枚举之外,项的查找方法与添加项的方法相
- 秩序并不重要
- 必须不使用枚举查找
- 集合将非常大,但在最初创建后不会进行修改 人口稠密
- 必须能够按键(字符串)查找,但也能够按项类型的两个属性之一查找
我希望这些信息足以说明我的问题。如果你有什么建议,我将不胜感激 为此尝试使用Linq!Linq是一个非常强大的东西 这里有一个小例子
public class YourClass
{
public int ClassIntProperty { get; set; }
public string ClassStringProperty { get; set; }
}
List<YourClass> YourClassItemsList = new List<YourClass>();
public void SeekItem()
{
//Get several items
var t = YourClassItemsList.Where(item => item.ClassIntProperty == 0).AsEnumerable();
var tt = YourClassItemsList.Where(item => item.ClassStringProperty == "abc").AsEnumerable();
//Get one item
var ttt = YourClassItemsList.FirstOrDefault(item => item.ClassIntProperty == 0);
}
公共类您的类
{
public int ClassIntProperty{get;set;}
公共字符串ClassStringProperty{get;set;}
}
List YourClassItemsList=新列表();
公共无效SeekItem()
{
//得到几个项目
var t=YourClassItemsList.Where(item=>item.ClassIntProperty==0).AsEnumerable();
var tt=YourClassItemsList.Where(item=>item.ClassStringProperty==“abc”).AsEnumerable();
//买一件
var ttt=YourClassItemsList.FirstOrDefault(item=>item.ClassIntProperty==0);
}
这就是我在查找项时需要做的,但会遍历集合,如果集合中有数千项,那么频繁调用该方法不会对性能产生很大影响吗?1)如何在不遍历整个集合的情况下查找集合中的项?O_O 2)了解有关LINQ和查询优化的更多信息!3) 您可以使用自己的迭代器而不是Linq。如果是这样的话,只有实验测试会告诉你你的迭代器是否比linq快!4) 如果您想在非常大的集合中查找Elemenet,那么您需要一个数据库!5) 您可以编写自己类型的collectin,它将支持索引等,但我认为这种解决方案不适合您……您可以使用Linq构建字典(唯一键)或查找(非唯一键)