arr.Sum()
関数を使用して合計を計算できます。しかし、それが配列の配列の場合。どのようにすべての値を追加しますか? データが であると仮定します。配列/リストは[[1,2,3],[3,4,5],[5,4,3]]
どのようにして、すべての最初のインデックス値の合計、s2、2番目のインデックス値の合計などをLINQを使用して取得しますか?インデックス位置を追加するLinqを使用して配列の配列の値
1
A
答えて
6
あなたはのLINQの助けを借りてカラムの値を合計したい場合:
int[][] source = new int[][] {
new int[] { 1, 2, 3},
new int[] { 3, 4, 5},
new int[] { 5, 4, 3},
};
int maxCol = source.Max(item => item.Length);
var colsSum = Enumerable
.Range(0, maxCol)
.Select(index => source.Sum(item => item.Length > index ? item[index] : 0))
.ToArray(); // let's meaterialize into an array
テスト:
Console.Write(string.Join(", ", colsSum));
結果:
9, 10, 11
は総括lin ESの価値観はあるが容易:
// [6, 12, 12]
var linesSum = source
.Select(item => item.Sum())
.ToArray();
したい場合は総合計:
// 30
var total = source
.Select(item => item.Sum())
.Sum();
または
// 30
var total = source
.SelectMany(item => item)
.Sum();
0
使用Aggregate
の組み合わせとZip
var arrays = new[]
{
new[] { 1, 2, 3 },
new[] { 3, 4, 5 },
new[] { 5, 4, 3 }
};
var result =
arrays.Aggregate(Enumerable.Repeat(0, 3),
(total, array) => total.Zip(array, (sum, current) => sum + current));
// result = { 9, 10, 11 }
Enumerable<T>.Zip
は、同じインデックスのアイテムで提供された機能を実行します。 (各行の列の可変数を処理します)
0
可能LINQベースのアプローチ:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Test
{
public class Program
{
private static IEnumerable<int> GetTotalsPerColumn(int[][] inputData)
{
var data = inputData.SelectMany(z =>
{
return z.Select((item, index) => new { item, index });
})
.GroupBy(z => z.index)
.OrderBy(z => z.Key)
.Select(y => y.Select(z => z.item).Sum()
);
return data;
}
static void Main(string[] args)
{
var inputData = new[] {
new[] { 1, 2, 3, 5},
new[] { 3, 4, 5, 6},
new[] { 5, 4, 3},
};
var values = GetTotalsPerColumn(inputData);
foreach (var value in values)
{
Console.WriteLine(value);
}
Console.ReadLine();
}
}
}
あなたはLINQを避けるために満足している場合、これはあなたが考えることができ、別のアプローチがあります。 GetTotalsPerColumn
にはDictionary
が入力されます。ここで、キーは列番号で、値は合計です。
using System;
using System.Collections.Generic;
namespace Test
{
public class Program
{
static void Main(string[] args)
{
var inputData = new[] {
new[] { 1, 2, 3, 5},
new[] { 3, 4, 5, 6},
new[] { 5, 4, 3},
};
var values = GetTotalsPerColumn(inputData);
foreach (var value in values)
{
Console.WriteLine(value.Key + " - " + value.Value);
}
Console.ReadLine();
}
private static Dictionary<int, int> GetTotalsPerColumn(int[][] inputData)
{
var values = new Dictionary<int, int>();
foreach (var line in inputData)
{
for (int i = 0; i < line.Length; i++)
{
int tempValue;
values.TryGetValue(i, out tempValue);
tempValue += line[i];
values[i] = tempValue;
}
}
return values;
}
}
}
関連する問題
- 1. LINQを使用して配列内の上位1000個の最大エントリの配列インデックス値を取得
- 2. VBA:Range.Formulaの右辺の位置に配列インデックスを使用
- 3. 別の配列のインデックス値を使用して配列を作成する
- 4. onItemClickListenerを使用した配列位置
- 5. 配列値の配列インデックス
- 6. 配列のインデックスをに追加したいselectオプションは配列のインデックスです
- 7. 特定の位置の配列に変数を追加する
- 8. コンパレータを使用して配列を並べ替え、インデックスの位置を保持
- 9. フォームコンテンツを使用して$ _SESSION配列に値を追加する
- 10. JavaScriptを使用して配列値を追加する方法
- 11. PHPを使用して配列に数値を追加する
- 12. nodejsを使用してmongooseスキーマの配列に値を追加
- 13. 配列と配列をインデックスとして使用する
- 14. 配列を使用して追加領域を追加する
- 15. インデックスを使用して値の配列を抽出する
- 16. データフレームの値を配列のインデックスとして使用する
- 17. MulitSelectListプリファレンスの各配列インデックス値にIFステートメントを追加する
- 18. 既存の配列に値の配列を追加する
- 19. foreachを使用して配列内のすべての配列に値を追加する方法は?
- 20. 別の配列にある値の位置を含むインデックス配列を作成する
- 21. LINQを使用して分割後に文字列配列のインデックスを取得
- 22. preg_replaceパターンを置換データ配列のインデックスとして使用
- 23. PHP - 2D配列の各配列に値を追加する
- 24. 配列のキー値をセッション配列に追加する
- 25. 配列の値のランダム化位置
- 26. 配列内の配列を使用するが、インデックスを失う
- 27. 配列リストを使用して別の配列リストのインデックスを指示する
- 28. 配列に値を追加
- 29. VBA Excelで配列内の配列に値を定義して追加する
- 30. 配列インデックスの削除、追加、移動
したがって、具体的な例として、このようなものを返すことを望んでいますか? [[6]、[12]、[12]]? –
@Jeいいえ、出力は[[9]、[10]、[11]]である必要があります –
各行の列の数は同じですか? – mjwills