2012-02-16 178 views
0

比方說,我有一個Dictionary<String, Guid>將字典轉換爲ArrayList

什麼是最快的方法將其轉換爲ArrayList?

我可以做到以下幾點:

ArrayList result = new ArrayList(); 

foreach (KeyValuePair<String, Guid> kvp in myDict) { 
    result.Add(new { Value = Base64Converter.ConvertBase64(kvp.Value), Display= kvp.Key}); 
} 

但一定是更好的方法。

回答

2

LINQ是您的緊湊和意味深長轉化收藏的朋友:

ArrayList result = 
    new ArrayList((from kvp in myDict 
       select 
       new { Value=Base64Converter.ConvertBase64(kvp.Key), 
         Display=kvp.Value }).ToArray()); 

以我的經驗LINQ到對象是爲表現相當出色的優化,但往往比起其他選項的性能損失。對於參考文獻,參見

http://blogs.msdn.com/b/csharpfaq/archive/2009/01/26/does-the-linq-to-objects-provider-have-built-in-performance-optimization.aspx

http://peterkellner.net/2009/06/03/linq-in-memory-performance/

http://you.arenot.me/2010/07/30/linq-to-objects-vs-list/

如果你有興趣的雅俗絕對性能,你的方法可能最終會更快。但是,除非你的字典很大,否則很難衡量差異。如果有疑問,基準。

0

使用LINQ,並假設List是OK(而不是一個ArrayList):

myDict 
    .Select(kvp => new { Value = Base64Converter.ConvertBase64(kvp.Value), Display = kvp.Key }) 
    .ToList(); 

或者通過快你的意思運行時的性能?

0

或者,如果它沒有被準確一個ArrayList:

var d = new Dictionary<string, Guid>(); 
    List<string> l = d.Select(x => x.Key).ToList();