c# - 是否有一个集合不仅可以通过键查找项目,还可以通过项目的属性查找项目?

标签 c# collections

我正在尝试找出在我的收藏中查找项目的最有效方法。首先,这里是一些更多的信息/要求:

  • 顺序并不重要。
  • 必须使用枚举查找。
  • 集合将非常大,但在初始后不会被修改 人口稠密。
  • 必须能够通过键(字符串)进行查找,但也能够通过项目类型的两个属性之一进行查找。

我目前正在使用一个继承自 KeyedCollection 的自定义集合,它使用 GetKeyForItem() 从项目中提取一个字符串,用作键,到目前为止没问题。

问题在于我希望能够查找项目的方式。据我了解,除了“脏”枚举之外,使用与添加项相同的方法查找项,无论是使用自定义相等比较器还是键。

我错过了什么吗?创建三个具有相同项目但对我希望能够查找的每个属性具有不同 GetKeyFoItem() 实现的集合是否可以接受?或者我可以使用另一个集合吗?

我希望这些信息足以说明我的问题。如果您有任何建议,我将不胜感激。

最佳答案

为此尝试使用 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);
    }

关于c# - 是否有一个集合不仅可以通过键查找项目,还可以通过项目的属性查找项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45518987/

相关文章:

c# - 打印位图文件

java - 如何使算法在Java中更有效地查找集合中的重复对象?

java - 在 Java 中使用哪个集合?

java - 如何在继续流式传输时获取第一个元素?

C# MVC 返回 View (对象)导致查询字符串?

c# - Azure Function 函数如何使用托管标识获取对 Azure 表存储的引用?

Scala 2.11 LinkedList 已弃用,我应该使用什么?

c# - 无法隐式转换类型 'System.Collections.Generic.IEnumerable Cast 错误

c# - ASP.NET Core 3.0 端点路由不适用于默认路由

c# - “绑定(bind)生成器”不询问嵌套的 ICustomTypeDescriptor(路径为空)?