Compétences en matière de clonage de plages d'éléments de tableau C#
Dans le développement de programmes, il est souvent nécessaire d'exploiter certains éléments d'un tableau. Un moyen efficace consiste à créer un nouveau tableau contenant uniquement les éléments requis. En C#, cela peut être réalisé grâce à des méthodes d’extension.
Méthode d'extension pour créer un sous-tableau
Pour créer un sous-tableau contenant une plage d'éléments spécifiée, vous pouvez définir la méthode d'extension suivante :
<code class="language-csharp">public static T[] SubArray<T>(this T[] data, int index, int length) { T[] result = new T[length]; Array.Copy(data, index, result, 0, length); return result; }</code>
Cette méthode reçoit le tableau d'origine, l'index du premier élément à contenir et la longueur du nouveau tableau. Il renvoie un nouveau tableau contenant un sous-ensemble spécifié d'éléments.
Exemples d'utilisation
Considérons l'exemple suivant :
<code class="language-csharp">int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 创建一个包含索引3到索引7的元素的子数组 int[] subarray = data.SubArray(3, 5); // 注意长度为5,包含索引3,4,5,6,7 // 输出子数组 Console.WriteLine(string.Join(" ", subarray));</code>
Sortie :
<code>3 4 5 6 7</code>
Clonage profond
Si vous avez besoin d'un clone profond (c'est-à-dire un nouveau tableau où les éléments eux-mêmes sont des clones plutôt que des références), vous pouvez utiliser une technique plus sophistiquée impliquant la sérialisation et la désérialisation. Voici une méthode d'extension mise à jour pour le clonage profond :
<code class="language-csharp">public static T[] SubArrayDeepClone<T>(this T[] data, int index, int length) { T[] arrCopy = new T[length]; Array.Copy(data, index, arrCopy, 0, length); using (MemoryStream ms = new MemoryStream()) { var bf = new BinaryFormatter(); bf.Serialize(ms, arrCopy); ms.Position = 0; return (T[])bf.Deserialize(ms); } }</code>
Cette méthode crée d'abord un nouveau tableau, y copie la plage d'éléments spécifiée du tableau d'origine, puis utilise la sérialisation pour créer un clone profond des objets du sous-tableau. Notez que les objets du tableau d'origine doivent être sérialisables. BinaryFormatter
a été marqué comme obsolète et il est recommandé d'utiliser des méthodes de sérialisation plus modernes telles que System.Text.Json
. Cet exemple sert uniquement à comprendre le principe et doit être remplacé par une méthode de sérialisation plus sûre dans les applications réelles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!