Wie kopiere ich einen Teil eines Arrays in ein anderes Array in C #?

144

Wie kann ich einen Teil eines Arrays in ein anderes Array kopieren?

Betrachten Sie, ich habe

int[] a = {1,2,3,4,5};

Wenn ich nun den Startindex und den Endindex des Arrays gebe a, sollte es in ein anderes Array kopiert werden.

Wenn ich den Startindex als 1 und den Endindex als 3 gebe, sollten die Elemente 2, 3, 4 in das neue Array kopiert werden.

Sync-Master
quelle

Antworten:

273
int[] b = new int[3];
Array.Copy(a, 1, b, 0, 3);
  • a = Quellarray
  • 1 = Startindex im Quellarray
  • b = Zielarray
  • 0 = Startindex im Zielarray
  • 3 = zu kopierende Elemente
Marc Gravell
quelle
7
Mit benannten Parametern, die jetzt verfügbar sind, müssten Sie keinen der 5 Parameter dokumentieren.
Hamish Grubijan
11
@ Hamish gut, vielleicht. Persönlich würde ich keine expliziten Namen hinzufügen, wenn dies den Code nicht wesentlich klarer machen würde, und ich bin mir (in diesem Fall) nicht sicher, ob die Parameternamen selbst dies erreichen würden.
Marc Gravell
3
int[] a = {1,2,3,4,5};

int [] b= new int[a.length]; //New Array and the size of a which is 4

Array.Copy(a,b,a.length);

Wobei Array eine Klasse mit der Methode Copy ist, die das Element eines Arrays in ein b-Array kopiert.

Beim Kopieren von einem Array in ein anderes Array müssen Sie denselben Datentyp für ein anderes Array angeben, von dem Sie kopieren.

Bajran
quelle
1

Hinweis: Bei dieser Frage wurde nach einem der Schritte in der Antwort zum Ändern der Größe eines vorhandenen Arrays gesucht .

Daher dachte ich, ich würde diese Informationen hier hinzufügen, falls jemand anderes nach einer Fernkopie als Teilantwort auf die Frage nach der Größenänderung eines Arrays suchen sollte.

Für alle anderen, die diese Frage finden und nach dem suchen, was ich war, ist es sehr einfach:

Array.Resize<T>(ref arrayVariable, newSize);

Dabei ist T der Typ, dh wo arrayVariable deklariert ist:

T[] arrayVariable;

Diese Methode behandelt Nullprüfungen sowie newSize == oldSize, die keine Auswirkung haben, und behandelt natürlich stillschweigend den Fall, in dem eines der Arrays länger als das andere ist.

Weitere Informationen finden Sie im MSDN-Artikel .

Appurist - Paul W.
quelle
0

Für den Fall, dass Sie Ihre eigene Array.Copy- Methode implementieren möchten .

Statische Methode vom generischen Typ.

 static void MyCopy<T>(T[] sourceArray, long sourceIndex, T[] destinationArray, long destinationIndex, long copyNoOfElements)
 {
  long totaltraversal = sourceIndex + copyNoOfElements;
  long sourceArrayLength = sourceArray.Length;

  //to check all array's length and its indices properties before copying
  CheckBoundaries(sourceArray, sourceIndex, destinationArray, copyNoOfElements, sourceArrayLength);
   for (long i = sourceIndex; i < totaltraversal; i++)
     {
      destinationArray[destinationIndex++] = sourceArray[i]; 
     } 
  }

Implementierung der Grenzmethode.

private static void CheckBoundaries<T>(T[] sourceArray, long sourceIndex, T[] destinationArray, long copyNoOfElements, long sourceArrayLength)
        {
            if (sourceIndex >= sourceArray.Length)
            {
                throw new IndexOutOfRangeException();
            }
            if (copyNoOfElements > sourceArrayLength)
            {
                throw new IndexOutOfRangeException();
            }
            if (destinationArray.Length < copyNoOfElements)
            {
                throw new IndexOutOfRangeException();
            }
        }
Hameed Syed
quelle