Лучший способ объединить в список <object>, где объект содержит список значений - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть IList<Row>, где Row содержит список ячеек IList<Cell>.Эти ячейки имеют ToString, ToDouble и т. Д.

. Я хочу просмотреть этот список строк и проверить, есть ли строки с одинаковым значением для cell[index].Скажем, для ячейки 3.
Если есть строки с одинаковым значением, я должен объединить эти строки в одну строку.Несомненно, что все ячейки - в случае одного и того же ключа - одинаковы, за исключением ячейки с количеством, допустим, что это ячейка 4. Так что это должно быть объединено (поэтому 1 удалено) с той лишь разницей, что значениеэто сумма обоих.

Я пытался создать Dictionary<string, double>.Я перебрал все строки, проверил, содержит ли карта ключ, если нет -> объединить (также сделал это с помощью метода расширения Merge, но с той же идеей).
После этого цикла я создал новый список, поместил словарь втам и перебрал старый список для получения другой информации.

Ну, я думаю, что мой путь слишком длинный, что должен быть способ сделать это намного проще, может быть, с помощью LINQ или чего-то еще.Есть идеи, как это сделать правильно?Или вы, ребята, думаете, что мой подход не так уж плох?

1 Ответ

0 голосов
/ 04 апреля 2019

Попробуйте:

var mergedRows = rows.GroupBy(x => x.Cells[0].Value.ToString())
            .Select(x => new Row() { Cells = new List<Cell>
                                                {
                                                   new Cell() { Value = x.Key },
                                                   new Cell() { Value = x.Sum(y => int.Parse(y.Cells[1].Value.ToString())) }
                                                }
                                   });
...