Сверните заполнение словаря в LINQ для выражения For - PullRequest
3 голосов
/ 22 октября 2010

У меня есть объект данных

  Data = class
  public
    s: string;
    i: Integer;
  end;

со многими из них в списке (или некоторой коллекции):

  var ol : List<Data> := new List<Data>;
  ol.Add(new Data(s := 'One', i := 1));
  ol.Add(new Data(s := 'Two', i := 2));
  ol.Add(new Data(s := 'Three', i := 3));
  ol.Add(new Data(s := 'Four', i := 4));
  ol.Add(new Data(s := 'Five', i := 5));

И я хочу поместить это в словарь:

  var l: Dictionary<string, data> := new Dictionary<String,Data>;

Я знаю, что могу сделать для или для каждого цикла, чтобы сделать это

  for each d in ol do
  begin
    l.Add(d.s, d);
  end;

Но я хочу использовать оператор LINQ (предпочтительно) или Для выражения цикла . Это легко, когда возвращается только один элемент, но не уверен в синтаксисе двух элементов для словаря.

1 Ответ

3 голосов
/ 22 октября 2010

РЕДАКТИРОВАТЬ: Я прыгнул прямо в это, но я не знаком с Delphi.В C # это было бы так просто, как этот ToDictionary вызов:

var dict = ol.ToDictionary(o => o.s, o => o);

Я думаю, что эквивалент Delphi будет:

var dict := ol.ToDictionary(o -> o.s, o -> o);
...