Ich habe zwei IEnumerable
s bereits gefüllt und ein Array groß genug, um alle Elemente der beiden von ihnen zu speichern:Copy IEnumerables oder ICollections in ein bestehendes Array-Eintrag weise
IEnumerable<int> foo = ... // contains some elements.
IEnumerable<int> bar = ... // contains some elements.
int[] array = ... // already existing. array.Length is at least foo.Count + bar.Count
ich die Elemente foo
kopieren möchten und bar
in array
. Und ich würde gerne in der Lage sein, dies zu tun, ohne neue Objekte zu erstellen (wie LINQ würde tun, wenn Concat
oder ToArray
aufrufen). In meinem konkreten Szenario ist mir die Reihenfolge egal, da sie später sortiert wird. Ein Weg, dies zu erreichen, ist dies:
int k = 0;
foreach (int i in foo)
array[k++] = i;
foreach (int i in bar)
array[k++] = i;
Ich mag möchte wissen, ob es eine integrierte Methode ist, die das Kopieren für mich tut (der Einfachheit halber Zwecke), ähnlich wie LINQ ToArray
oder Concat
, aber ohne dass um neue Objekte zu erstellen. Bereiche als Eingabe zu geben, wäre auch schön. Eine Methode wie unten vielleicht?
// desired way:
foo.InsertIntoArray(0) // insert the elements of foo into array starting at index 0
bar.InsertIntoArray(foo.Count) // insert the elements of bar into array starting at index foo.Count
Ich kenne die Array.Copy
Methode, aber soweit ich weiß, es funktioniert nur von Array zu Array kopieren, nicht von IEnumerable
zu Array. Gibt es etwas Ähnliches?
_ "ohne durch eine Schleife iterieren" _ -- Was meinen Sie? Sogar 'Buffer.BlockCopy()' beinhaltet eine Schleife. Wenn Sie vermeiden möchten, eine Schleife in Ihren Code zu schreiben, können Sie einfach Ihre eigene Hilfsmethode schreiben, um dies zu erreichen. Es gibt keine Methode in 'Array' oder' Enumerable', um genau das zu tun, was Sie fragen, aber es ist trivial, selbst eines zu implementieren. Sie können es sogar zu einer Erweiterungsmethode der Klasse "Enumerable" machen. Aber wie auch immer Sie es tun, es wird eine Schleife _irgendwo_ geben müssen. –
Ich meinte "ohne Schleifen in meinem Code schreiben zu müssen". Was intern passiert, ist mir egal, solange es kein neues 'IEnumerable' oder 'Array' erzeugt. Das Schreiben einer Hilfsmethode beinhaltet immer noch das Schreiben von Schleifen. Ich möchte nur wissen, ob es Methoden gibt, die das für mich tun. Wenn die Antwort "Nein" lautet, ist dies kein Grund, um abzustimmen, würde ich sagen. – Kjara
_ "Das Schreiben einer Hilfsmethode beinhaltet immer noch das Schreiben von Schleifen" _ - es beinhaltet das Schreiben _einer einzigen Schleife _ selbst. Einmal. Warum ist das so schlimm? Schließlich würde die mythische 'InsertIntoArray()' Methode eine Schleife haben. Und warum willst du es vermeiden, ein neues "IEnumerable" zu erstellen? Der Code, den Sie oben anzeigen, erstellt _zwei_. Warum willst du kein neues Array erstellen? Der obige Code tut es. Es ist wirklich nicht klar, was Sie überhaupt wollen. –