2016-07-21 14 views
1

Das Array, das ich verwende, ist int[,,] und ich möchte den ersten Wert von jedem machen (was ich annehmen werde) Tupel in einer Methode und dann möchte ich die zweiten beiden Werte mehrmals ändern. (In einem anderen Verfahren)Gibt es eine Möglichkeit, Tupel-Werte innerhalb eines C# -Arrays zu ändern?

Zum Beispiel:

int[,,] MyArrayGet() 
{  
    int [,,] myArray; 
    int [,,] myArray = new int[9,9,9]; 
    for (int i = 0; i < 10; i++) 
    { 
     myArray[i] = [SomeInt,0,0]; 
    } 
    return myArray; 
} 
int[,,] MyArrayModify(int[,,] myArray) 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     if (somthing is true) 
     { 
      myArray[i] = [dont change this value,n+1,dont change this value] 
     } 
     if (somthingelse is true) 
     { 
      my Array[i] = [dont change this value,dont change this value,n+1] 
    } 
} 

Gibt es eine schnelle und einfache Möglichkeit, dies zu tun?

Ich habe diese Frage How to get array of string from List<Tuple<int, int, string>>? überprüft, aber entweder fühle ich nicht, dass es meine Frage beantwortet.

+5

Ich bin mir nicht sicher, es ist klar, was Sie fragen. Könnten Sie einen Muster-/Pseudo-Code von dem, was Sie wollen, bereitstellen? –

+0

Siehe http://stackoverflow.com/questions/3131400/why-tuples-items-are-readonly – Tarik

+0

ist ein Anfänger, ich verstehe nicht die Antworten auf die Frage, die Sie vorgeschlagen, meine Entschuldigung. @Tarik –

Antwort

2

Tupel von Design ist unveränderlich. Erstelle einfach ein neues beim Modifizieren.

IEnumerable<Tuple<int, int, int>> Get() 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     yield return Tuple.Create(i, 0, 0); 
    } 
} 

IEnumerable<Tuple<int, int, int>> Modify(IEnumerable<Tuple<int, int, int>> tuples) 
{ 
    foreach (var tuple in tuples) 
    { 
     if (tuple.Item1 < 5) 
     { 
      yield return Tuple.Create(tuple.Item1, tuple.Item2 + 1, tuple.Item3); 
     } 
     else 
     { 
      yield return Tuple.Create(tuple.Item1, tuple.Item2, tuple.Item3 + 1); 
     } 
    } 
} 

Ihr Code wie folgt aussieht Javascript mehr als C#. int[,,] ist 3D-Array nicht Array von 3 Elementen.

Tuple<int, int, int>[] ist ein Array von Tuple von 3 Artikeln. Wenn Sie kein Anfänger sind und LINQ verwenden, ist IEnumerable<Tuple<int, int, int>> eine bessere Version.

1

Sie müssen das Tupel, das Sie ändern möchten, durch ein neues Tupel ersetzen, das den aktualisierten Wert enthält. Alternativ können Sie eine Klasse mit den benötigten Feldern und öffentlichen Eigenschaften erstellen. Das dauert nur Sekunden und macht Ihren Code wahrscheinlich lesbarer.