2017-08-05 68 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)你可以編寫自己的收集類型,它將支持索引等,但我不認爲這種解決方案適合你... –

相關問題