例如我有這個List<List<int>>:
[2,4,4,2,5]
[1,3,6,3,8]
[0,3,9,0,0]
應該回傳總和,但只取單元格,假設單元格計數始終相同:
[3, 10, 19, 5, 13]
如果可能的話,我試圖找到一種簡單的方法來解決這個問題Linq,因為我正在使用很多for回圈和if條件來解決這個問題,而且我自己也很復雜。
有沒有可能使用 Linq 實作這一目標的方法?
uj5u.com熱心網友回復:
Linq 方法
List<List<int>> items = new List<List<int>>() {
new List<int> { 2, 4, 4, 2, 5 },
new List<int> { 1, 3, 6, 3, 8 },
new List<int> { 0, 3, 9, 0, 0 } };
List<int> result = Enumerable.Range(0, items.Min(x => x.Count)).Select(x => items.Sum(y => y[x])).ToList();
uj5u.com熱心網友回復:
var xx = new List<List<int>>() {
new List<int>() { 2, 4, 4, 2, 5 },
new List<int>() { 1, 3, 6, 3, 8 },
new List<int>() { 0, 3, 9, 0, 0 },
};
var y = xx.Aggregate((r, x) => r.Zip(x).Select(p => p.First p.Second).ToList());
uj5u.com熱心網友回復:
我用很多
for回圈和if條件來做這件事,我讓自己復雜化了。
您可以通過使用單個for回圈來完成它。
實作這一目標的兩種可能方法是:
方法一
- 創建一個容量等于原始串列集合中任一串列大小的陣列
0用s填充陣列- 遍歷原始串列集合中的所有串列,聚合每個索引的總和
方法二
- 基于原始串列集合中的第一個串列創建串列
- 遍歷原始串列集合中的所有后續串列,聚合每個索引的總和
兩種方法都受益于問題帖子中給出的假設:
[...] 假設細胞計數始終相同
如果您的原始串列集合定義為List<List<int>>:
List<List<int>> valuesCollection = new()
{
new() { 2, 4, 4, 2, 5 },
new() { 1, 3, 6, 3, 8 },
new() { 0, 3, 9, 0, 0 },
};
,這兩種方法可以實作如下:
方法一
var indexCount = valuesCollection[0].Count;
var sums = new int[indexCount];
Array.Fill(sums, 0);
foreach (var values in valuesCollection)
{
for (var i = 0; i < sums.Length; i )
{
sums[i] = values[i];
}
}
方法二
- 注意:使用命名空間
System.Linq
var sums = valuesCollection[0].ToList();
foreach (var values in valuesCollection.Skip(1))
{
for (var i = 0; i < sums.Count; i )
{
sums[i] = values[i];
}
}
使用任一方法,sums的結果內容將是{ 3, 10, 19, 5, 13 }.
示例小提琴在這里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510627.html
標籤:C#林克
