Insérer un tableau d'octets dans un autre tableau d'octets à une position spécifique avec c#
Cela peut être une question stupide, mais n'ont pas trouvé une réponse simple et pourtant...
J'essaie d'insérer un simple c# tableau d'octets dans un autre tableau d'octets à une position spécifique. E. g. l'existant octets doit être pas être modifiée, mais seulement déplacé plus à l'arrière. Vraiment comme vous d'une copie de la page du texte de bloc à l'intérieur d'un bloc de texte.
- Jusqu'à présent, je voudrais créer un nouveau tableau avec la longueur des deux tables existantes.
- Copie du premier tableau dans le nouveau, jusqu'à la position où l'insert commence.
- Ajouter le tableau inséré
- Ajouter le reste de la matrice existante.
Mais je suppose que c'est quelque chose de commun et devrait être plus facile? Ou je me trompe?
- Êtes-vous sûr que vous ne voulez pas utiliser une Liste à la place?
Vous devez vous connecter pour publier un commentaire.
Utiliser un
List<byte>
au lieu d'unbyte[]
; il apportera la flexibilité que vous recherchez...Alors si vous avez besoin de revenir à un
byte[]
pour quelque raison que ce soit, vous pouvez appeler...Insert
est un O(n) opérations. Si vous vous attendez à l'aide de nombreux Inserts de très petites listes d'octets, vous devez envisager d'utiliser unLinkedList<T>
.Si l'insertion d'un grand bloc de données dans le milieu d'une autre grande partie des données est quelque chose que vous faites souvent, alors vous pouvez envisager d'utiliser une structure de données conçu pour le faire. Un tableau est conçu pour être fixe la taille et mutable dans le contenu. Si votre exigence inclut la variable "taille", puis un tableau est un type de données incorrect pour vous. Plutôt considérer une liste doublement chaînée ou un catenable deque.
Vous avez identifié un trivial quatre-étape de l'algorithme qui fait ce que vous voulez. Il ne va pas beaucoup plus facile que cela.
Regarder
Array.CopyTo
.Si la performance n'est pas important, pensez à:
Je suppose que c'est à peu près quatre-étape algo vous l'avez suggéré, à l'exception de la première étape "qui vient à la fin." Toutefois, notez que c'est inefficace pour un certain nombre de raisons, y compris une inutilement la mémoire tampon dynamique et une redondance partielle de l'énumération de la première pile.
Sinon, ce que vous avez proposé est parfaitement bien.
Si vous pouviez échanger votre objet pour quelque chose d'un peu plus grand que vous pourriez considérer les choses comme une Liste qui a un InsertRange méthode qui fait ce que vous voulez (http://msdn.microsoft.com/en-us/library/884ee1fz.aspx). Bien sûr l'aide d'un autre objet ne peut pas être une option, mais son une suggestion pour un moyen facile de faire les choses. Aussi d'autres objets peuvent être des plus utiles. Boutique autour... 🙂
Un tableau, par définition, d'une taille fixe. Vous ne pouvez pas insérer ou retirer des éléments, simplement remplacer des éléments.
Vous devriez un liste à la place. Les listes de fournir des méthodes pour d'insérer ou de retirer éléments et sous-plages.