Преобразовать словарь в ArrayList - PullRequest
0 голосов
/ 16 февраля 2012

Допустим, у меня есть Dictionary<String, Guid>

Какой самый быстрый способ преобразовать это в ArrayList?

Я могу сделать следующее:

ArrayList result = new ArrayList();

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

Но должен быть лучший способ.

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

LINQ - ваш друг для компактного и выразительного преобразования коллекций:

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

По моему опыту, LINQ to Objects очень хорошо оптимизирован для производительности, но часто есть снижение производительности по сравнению с другими вариантами. Для справок см

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 голосов
/ 16 февраля 2012

Или, если это не обязательно должен быть ArrayList:

    var d = new Dictionary<string, Guid>();
    List<string> l = d.Select(x => x.Key).ToList();
0 голосов
/ 16 февраля 2012

Используя LINQ и предполагая, что список в порядке (в отличие от ArrayList):

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

Или под быстрым вы подразумеваете производительность во время выполнения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...