LINQは入力要素(「LINQは割り当てを行いません」と記述されているコメント作成者の1人)を変更しませんが、LINQを使用して1つの入力要素を取得して1つの出力要素を作成できます。これのための関数はEnumerable.Selectです。
Selectは、ソースコレクションから1つのオブジェクトを取り出し、それを出力コレクションの1つのオブジェクトに変換します。この出力オブジェクトは、任意のタイプでよい。
LINQのためにdouble型のオブジェクトは、[] [] doubleの配列の配列として考えることができます:あなたのダブル[] []を簡単に変換されます。
double[][] matrix = ...
IEnumerable<IEnumerable<double>> mySequence = matrix;
mySequence内のすべての要素がシーケンスでありますダブルスのmySequenceのすべての要素に対して、ダブルスの配列を作成する、またはより一般的なものを作成したい:ダブルスのシーケンスを作成する:IEnumerable < double>これは、遅延実行を使用できるという利点がある。配列が本当に必要な場合は、後でいつでもToArray()を使用できます。
問題は、シーケンスの前の要素を使用することです。ほとんどのLINQ関数は、現在の入力要素を列挙子から取得します。
double[] innerSequence = ...
var tuples = innerSequence.Skip(1).Zip(innerSequence,
(x, y) => Tuple.Create(x,y)
各タプルは現在、あなたinnerSequenceの前の要素が含まれ、最初のを除いて: 幸いにも、Enumerable.Zipを使用して、あなたは現在、ダブル、以前のダブルを含むタプルのシーケンスにinnersequenceを変換することができます最初の要素は前の要素を持たないため、シーケンスの要素となります。 mySequence各innerSequence innerSequencesと のシーケンスである場合、上記のコードの続き
倍
var A = mySequence.Select(innerSequence =>
// for every element in this sequence of doubles
// you want the tuple of the element and its previous element
outerElement.Skip(1).Zip(outerElement, (x,y) => Tuple.Create(x,y));
の配列がだから今Aは、各タプルは、現在の組合せであり、タプル配列の配列であります要素と前の要素:
結果のすべての要素iは、タプルの配列になりました。 要素[0]今タプルの配列である:
- (行列[0] [1]、行列[0] [0])
- (行列[0] [2]は、行列[0 [1])
- (マトリックス[0] [3]、マトリックス[0] [2])
- など
要素[1]:
- (行列[1] [1]、行列[1] [0])
- (行列[1] [2]は、行列[1] [1])
- 等
var B = A.Select(tupleSequence => tupleSequence.Select(tuple => // use tuple with element and previous element to decide which // items to select
すべてのタプルが現在の要素とPRを含んでいます明らかに要素 内部シーケンスのdoubleを作成するためにこれを使用してください)
あなたのC++コードは正しく見えません。それはコンパイルされず、未割り当ての 'Tem'変数をいくつかの問題として使用しています。あなたは何をしようとしているのですか? – Enigmativity
@ Enigmativityコードを変更しましたが、主なことはC#で二重の 'forループ'によって達成されることです(二次元リストを使用して) – user6703592
元の質問はここを参照してください:http://stackoverflow.com/questions/ 39013033 /。 –