2017-06-28 4 views
1

Ich habe einen 2D-Array int[,] b = { { 1, 0, 1, 1 }, { 1, 1, 0, 1 }, { 0, 0, 0, 1 } };schnellster Weg für 2D-Array Element für Element Vergleich

Ich mag durch das Element Zustand in Array-Elemente überprüfen, so dass, wenn vorheriger Wert von Array-Index unterscheidet mich von aktuellem Wert Array, dann wird einer meiner Zähler inkrementiert.Rückkehr Typ des gesamten Arrays ist auch 1D-Array. Hier steht Zeile für meinen Kanal und Spalte für die Nummer des Beispielwerts.

Ich kann es durch 2 Schleifen tun und Element für Element vergleichen, wie ich bereits in Delphi7 getan hatte, aber jetzt arbeite ich an C#. Also gibt es einen schlauen und schnellsten Weg, das Gleiche zu tun, bitte sag es.

Die Ausgabe der obigen Anordnung ist int [] output = {2} als 1->0 so inkrementieren wieder 0->1 dann inkrementiert dann wieder ein, so gleichen Zustand, so dass kein Inkrement so 2 Gesamtwert ist.

Das Gleiche gilt für alle othere Elemente so Ausgabe [2,2,1]

Antwort

3

sein Es kann mit Linq getan werden, denke ich.

int[,] b = { { 1, 0, 1, 1 }, { 1, 1, 0, 1 }, { 0, 0, 0, 1 } }; 

var result = Enumerable.Range(0, b.GetLength(0)) 
     .Select(row => Enumerable.Range(0, b.GetLength(1)-1).Count(col => b[row, col + 1] != b[row, col])).ToArray(); 

Wo:

b.GetLength(0) - Anzahl der Zeilen in der Matrix Get

b.GetLength(1) - Anzahl der Spalten in der Matrix

Count(y => b[row, col + 1] != b[row, col])) - Count nur verschiedene Artikel

+0

Sie, was erklären kann, Wert x und y halten, weil nach lin x sollte Zeile Länge des Arrays b und y sollte Spaltenlänge des Arrays haben. aber nach Code sieht es anders aus. –

+0

Ich habe den obigen Code bearbeitet. 'x' verarbeitet die Zeilennummer und 'y' verarbeitet die Spaltennummer. Ich habe es in Zeile und Spalte geändert. Dies liegt daran, dass die Zeile von 'Enumerable.Range (0, b.GetLength (0)) 'kommt, das ist der Bereich der Zeilen 0 bis zur Anzahl der Zeilen im Array. Ähnliches gilt für Spalten. Außer Reichweite ist 1 Stück weniger als ich Artikel mit dem nächsten vergleiche. –