Я хочу добавить два списка числового типа так, чтобы addList [x] = listOne [x] + listTwo [x]
Вывод списка должен быть универсальным. использовать в будущих запросах linq.
Хотя я смог сделать это, используя приведенный ниже код, я не могу помочь, но чувствую, что должен быть лучший способ. Есть идеи?
List<int> firstList = new List<int>(new int[] { 1, 3, 4, 2, 5, 7, 2, 5, 7, 8, 9, 0 });
List<int> secondList = new List<int>(new int[] { 4, 6, 8, 3, 1, 5, 9, 3, 0 });
int findex = 0;
ILookup<int, int> flookup = firstList.ToLookup(f =>
{
int i = findex;
findex++;
return i;
}, p => p);
var listsAdded = from grp in flookup
select grp.First() + secondList.ElementAtOrDefault(grp.Key);
foreach (int i in listsAdded)
Console.WriteLine(i);
var result =
from i in
Enumerable.Range(0, Math.Max(firstList.Count, secondList.Count))
select firstList.ElementAtOrDefault(i) + secondList.ElementAtOrDefault(i);
Похоже, вам нужна такая функция:
public static IEnumerable<int> SumIntLists(
this IEnumerable<int> first,
IEnumerable<int> second)
{
using(var enumeratorA = first.GetEnumerator())
using(var enumeratorB = second.GetEnumerator())
{
while (enumeratorA.MoveNext())
{
if (enumeratorB.MoveNext())
yield return enumeratorA.Current + enumeratorB.Current;
else
yield return enumeratorA.Current;
}
// should it continue iterating the second list?
while (enumeratorB.MoveNext())
yield return enumeratorB.Current;
}
}
Вам нужен метод Zip. Этот метод позволяет объединять списки одинаковой длины в один список, применяя проекцию.
Например
var sumList = firstList.Zip(secondList, (x,y) => x + y).ToList();
Этот метод был добавлен в BCL в CLR 4.0 ( Ссылка ). Однако это довольно просто реализовать, и в Интернете доступно множество версий, которые можно скопировать в приложение 2.0 или 3.5.
var res = list.Concat(list1);
объединяет два списка, включая возможные дубликаты.
var res = list.Union(list1);
конкатенирует два списка, получая результат без дубликатов.