2013-04-15 47 views
0

說,我有一個元素HashSet的:高效的方式來獲得HashSet的所有元素在.NET

HashSet<int> hsData = new HashSet<int>(); 

,並在某些時候我需要處理這些元素(一個接一個)。我當然可以將其轉換爲一個陣列,並以此方式工作:

int[] arr = hsData.ToArray(); 

但我不確定此轉換效率如何?

我看到人們推薦在HashSet本身上使用foreach,但由於我的代碼架構,我無法使用它。我需要的東西可以這樣工作:

它是最後一個元素?如果否,則獲取它並前進到下一個 元素。

+3

我並沒有真正理解這個問題......但是......「但是我不確定這種轉換的有效性如何?」你是否檢查過它是否重要?不要打擾改進不影響任何內容的事情。 – gdoron

+1

什麼是HashSet中的「最後一個元素」?集合不是有序的。 – dtb

+2

@dtb我認爲他意味着可用的最後一個元素。 –

回答

1

如您所述,轉換爲數組可能會有一些性能缺陷。 foreach在幕後做了什麼是得到一個在HashSet的統計員並貫穿它。

HashSet<T>還實現IEnumerable<T>,可用於枚舉集合中的一個更有效的方式。查看here以獲得IEnumerable的參考資料。

0

如果你願意,你可以使用一個foreach。只需保持給定列表中所有元素的運行計數器,隨着迭代次數遞減,並與計數器進行比較。

另一方面,是否將它變成一個數組是一件大事?這個操作發生了幾千次?

相關問題