Используя.Zip или linq в c#, чтобы складывать два поля серии объектов, содержавших в двух списках

У меня есть список объектов

List<Objeto> lista1;
List<Objeto> lista1;

У объекта есть признак X и признак Y.

Я хочу сделать следующее:

List<Objeto> listaSuma => складывать стоимость Y каждого объекта и возвращать это в новый список объектов (objeto { X , Y + Y)).

Очевидно с циклом for уже я сделал ее. Я хочу использовать Linq или Zip, но я не знаю как.

PD (у объектов есть больше переменных, но ничего не нужно делать с ними)

List<Coordenadas> result = new List<Coordenadas>();
for (int i = 0; i < list1.Count; i++)
  {
     objetAux = new Coordenadas();
     objetAux.Y = list1[i].Y + list12[i].Y;
     objetAux.X = list1[i].X;
     result.Add(objetAux);
  }
2
задан 11.01.2017, 17:30
0 ответов

Действительно, ты можешь использовать Zip() чтобы сочетать оба списка с желанным результатом:

List<Coordenadas> result = 
    list1.Zip(
        list12,
        (primero, segundo) =>
            new Coordenadas
            {
                Y = primero.Y + segundo.Y,
                X = primero.X
            }).ToList();

Хотя синтаксис интересен, не надейся, что результат будет являться лучше, что цикл, который уже у тебя есть.

1
ответ дан 03.12.2019, 17:45

Если я понимаю тебя правильно, единственным, что ты должен делать, является select производя каждый объект, как ты хочешь, что-либо подобное:

List<objeto> listaSuma = lista1.Select(l => new objeto() { x=l.x, y=l.y + l.y })
                              .ToList<objeto>();

Edit

Как ты комментируешь, что objeto у него есть больше свойств, вероятно то, в чем ты нуждаешься, было списком используя новый анонимный тип. Это был бы код:

var listaSuma = lista1.Select(l => new { x=l.x, y=l.y + l.y }).ToList();

Edit 2

В твоем начальном вопросе я не понял хорошо того, что ты хотел. Если то, в чем ты нуждаешься, состоит в том, чтобы объединять два списка, действительно ты можешь использовать Zip (начиная с Net 4.0) и делать следующее:

var listaSuma  = lista1.Zip(lista2, (primero, segundo) => 
                          new { x = primero.x, y = primero.y + segundo.y }).ToList();
1
ответ дан 03.12.2019, 17:45

Теги

Похожие вопросы