C# linq列表的元素求和< int>

mctunoxg  于 2023-05-04  发布在  C#
关注(0)|答案(1)|浏览(188)

我有一个或多个相同长度的int列表。我想把它们合并到一个新的列表中,按索引对它们求和:

var a = new List<int>() { 1, 1, 1 };
    var b = new List<int>() { 1, 1, 1 };
    var c = new List<int>() { 3, 4, 5 };
   //or more lists
   
    expected = {5, 6, 7}; // == { 1 + 1 + 3, 1 + 1 + 4, 1 + 1 + 5}
kq0g1dla

kq0g1dla1#

如果你有 * 几个 * 列表,你可以将它们 * 组织 * 成一个 * 集合 *,并在 Linq 的帮助下 * 查询 * 这个集合:

using System.Linq;

...
// collection (let it be list) instead of separate variables a, b, c
// If lists have unequal number of items, I use 0 instead of abscent item 
var lists = new List<List<int>>() {
  new List<int>() {1, 2, 3},
  new List<int>() {1, 2, 1},
  new List<int>() {1, 4, 3},
};

...

// {3, 8, 7} == { 1 + 1 + 1, 2 + 2 + 4, 3 + 1 + 3 }
List<int> expected = Enumerable
  .Range(0, lists.Max(item => item.Count))
  .Select(index => lists.Sum(item => item.ElementAtOrDefault(index))) 
  .ToList();

Fiddle
如果你想要a, b, c你可以把

var a = lists[0];
var b = lists[1];
var c = lists[2];

相关问题