Если под functional
вы подразумеваете без циклов, вы можете использовать LINQ Zip
для объединения значений и получения IEnmerable<Customer>
:
var customers=ids.Zip(names,(id,name)=> new Customer
{
Id = Int32.Parse(ids[i]);
Name = names[i];
})
.ToArray();
//Or .ToList(); if a List<T> is preferable
Я говорю if
, потому что для создания массива все еще требуетсявыделение массива и его изменение. На самом деле это больше дороже, чем создание массива заранее, потому что ToArray()
не знает, насколько велик массив для создания, поэтому может потребоваться перераспределить его внутренние буферы.
Более функциональным подходом было бы использование IEnumerable<Customer>
, произведенного Zip
. Эта последовательность объектов customer может использоваться любым другим оператором LINQ или пользовательскими методами, которые ожидают IEnumerable<T>
.
. Более производительная версия создаст массив заранее и скопирует значения из IEnumerable, созданного zip:
var customers=new Customer[ids.Length];
var values=ids.Zip(names,(id,name)=> new Customer
{
Id = Int32.Parse(ids[i]);
Name = names[i];
});
var i=0;
foreach(var values)
{
customers[i++]=v;
}