2017-08-05 43 views
2

我正在努力找出在我的收藏中找到物品的最有效方式。首先这里是一些更多的信息/要求:是否有一个用于查找物品的集合,不仅是按键,还有物品的属性?

  • 订单并不重要。
  • 必须不是使用枚举查找。
  • 收集量非常大,但在填充初始值为 之后将不会进行修改。
  • 必须能够通过键(字符串)查找,但也能够通过项目类型的两个属性之一来查找。

我目前使用的继承自KeyedCollection的自定义集合,它使用GetKeyForItem()从项目中提取一个字符串,用作关键字,到目前为止还不错。

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

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

我希望这是足够的信息来说明我的问题。我会很感激你的任何建议。

+0

您可以使用LINQ来构建字典(唯一键)或查找(非唯一键) –

回答

0

尝试使用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); 
    } 
+0

这做什么,我需要寻找项目,但迭代的条款通过集合,如果集合中有成千上万的项目,这会不会对频繁调用该方法的性能产生重大影响? – Polygami

+0

1)你想如何查找集合中的项目,而无需迭代整个集合? O_o 2)了解关于LINQ和查询优化的更多信息! 3)你可以使用你自己的迭代器而不是Linq。如果是这样,只有实验测试会告诉你,如果你的迭代器比linq的更快! 4)如果你想在非常大的集合中查找elemenets,那么你需要一个DataBase! 5)你可以编写自己的收集类型,它将支持索引等,但我不认为这种解决方案适合你... –

相关问题