2016-06-05 2 views
0

Wie kann das Vorzeichen aller Zahlen in einem zweidimensionalen Array für die spezifische Dimension geändert werden?Vorzeichen aller Werte in einem zweidimensionalen Array für die spezifische Dimension ändern

Ich habe zum Beispiel object[,], die mit dem Wert gefüllt ist, wie

[0,1] 
[0,2] 
[0,3] 

ich das Zeichen für alle Werte in der zweiten Dimension ändern möchten

[0,-1] 
[0,-2] 
[0,-3] 

zu bekommen, was die Art und Weise ist Um dies effizient mit einer kleinen Menge an Code zu tun?

Ich begann foreach für jedes Element zu denken, aber ich bin schon hier verloren

object[,] values = new object[1, 100]; 
foreach (object[,] v in values) 
    { 

    } 
+1

Gibt es einen Grund, warum Sie ein Array von Objekten anstelle eines Arrays von Ints verwenden? –

+0

Es ist in meinem Fall. Ich weiß nicht im Voraus, welcher Datentyp zu Array – Nuts

+0

gut gefüllt ist, dann ist die erste Option in meiner Antwort, wie ich schrieb, eine Möglichkeit, es zu tun. –

Antwort

1

Hier ist eine Möglichkeit, es zu tun:

object[,] values = new object[1,10]; 

for (var i = 0; i < values.GetLength(0);i++) 
{ 
    for (var j = 0; j < values.GetLength(1); j++) 
    { 
     var obj = values[i, j]; 
     int intVal; 
     if (obj != null && int.TryParse(obj.ToString(), out intVal)) 
     { 
      values[i, j] = -1 * intVal; 
     } 
    } 
} 

Wenn Sie jedoch eine Reihe von verwenden würden, Ints würde Ihr Code wie folgt aussehen:

int[,] values = new int[1, 10]; 

for (var i = 0; i < values.GetLength(0); i++) 
{ 
    for (var j = 0; j < values.GetLength(1); j++) 
    { 
      values[i, j] = -1 * values[i, j]; 
    } 
} 
+0

Ich habe mit dem ersten Vorschlag versucht, aber int.TryParse (obj.ToString(), out intVal) ist nicht erfolgreich. Mein obj Testwert war -4166.666 (Ich habe nicht unbedingt int Werte im Array) – Nuts

+0

double.TryParse funktioniert besser in meinem Fall – Nuts

+0

Nun, die Beispieldaten, die Sie zur Verfügung gestellt enthalten nur int-Werte, also ... Wenn Sie wahrscheinlich sind Begegne Gleitkommazahlen, dann double.TryParse ist eine bessere Option als Int.TryParse. –

0

Ist das 2-Dimensional Objekt Array object[,] eine Anforderung, oder können Sie Ihre Daten in einer einfacher zu arbeiten mit Struktur darstellen? Etwas wie:

int[][] matrix = new[] 
{ 
    new[] {0, 1, 2}, 
    new[] {0, 2, 4}, 
    new[] {0, 3, 9} 
}; 

Dann können Sie Ihre Transformation wie dies gewünscht erstellen:

int columnToFlip = 1; 
IEnumerable<IEnumerable<int>> flipped = matrix.Select(row => row.Select((value, index) => index == columnToFlip ? -value : value)); 

Oder, wenn Sie das Ergebnis in einem int[][] Array benötigen, dann:

int[][] flippedMatrix = matrix.Select(row => row.Select((value, index) => index == columnToFlip ? -value : value).ToArray()).ToArray(); 

C# Lambda Expressions und Enumerable Extension Methods sind leistungsstarke Tools zum Transformieren, Filtern, Ordnen, Verbinden, Aggregieren, Gruppieren und Projizieren von Daten.

Verwandte Themen