Рассматривая ответ Марка (и, в конечном счете, метод Zip
, как .Net 4), имеется значительное количество накладных расходов для перечисления и объединения строк, где они в конечном итоге выбрасываются; можно ли это сделать без этих отходов?
Рассматривая ответ Джона, создание проекции динамических объектов для ссылки на существующие данные, а затем создание нового набора объектов из этого зеркала может быть сдерживающим фактором для использования этого метода, если общее количество строк было слишком большим.
В приведенном ниже фрагменте используются ссылки на исходные данные, а только впустую Проецируемые названия создаются теми, у которых есть нулевая строка, которые впоследствии удаляются. Также перечисление данных сведено к минимуму.
String[] title = { "One","Two","three","Four"};
String[] user = { "rob","","john",""};
user.Select ((usr, index) => string.IsNullOrEmpty(usr)
? string.Empty
: string.Format("{0}:{1}", title[index], usr))
.Where (cmb => string.IsNullOrEmpty(cmb) == false)
В качестве альтернативы эта методология может иметь пользовательский массив, размер которого меньше размера, чем массив заголовков в качестве плюса.
Aggregate
функция упускать из виду, здесь в действии:
int index = 0;
user.Aggregate (new List<string>(),
(result, usr) =>
{
if (string.IsNullOrEmpty(usr) == false)
result.Add(string.Format("{0}:{1}", title[index], usr));
++index;
return result;
})
'Zip' теперь является стандартным методом, как в .NET 4.0. http://msdn.microsoft.com/en-us/library/dd267698.aspx – Mashmagar