Maison >développement back-end >C++ >Comment puis-je cloner efficacement un sous-ensemble d'éléments de tableau en C# à l'aide de méthodes d'extension ?

Comment puis-je cloner efficacement un sous-ensemble d'éléments de tableau en C# à l'aide de méthodes d'extension ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-18 20:22:08155parcourir

How Can I Efficiently Clone a Subset of Array Elements in C# Using Extension Methods?

Utilisez des méthodes d'extension pour cloner efficacement des sous-ensembles de tableaux

Lorsqu'il s'agit de tableaux, il est souvent nécessaire de créer un nouveau tableau contenant certains éléments. Bien qu’une boucle puisse y parvenir, l’utilisation de méthodes d’extension constitue une approche plus propre.

<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 d'extension étend le type T[] et renvoie un nouveau tableau contenant des éléments de la longueur spécifiée en commençant à l'index spécifié. Par exemple :

<code class="language-csharp">int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] sub = data.SubArray(3, 4); // 结果为 {3, 4, 5, 6}</code>

Sous-ensemble de tableau de clone profond

Si vous avez besoin d'un clone profond d'un sous-ensemble d'un tableau (chaque élément est également une copie), vous pouvez utiliser la sérialisation.

<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>

Notez que ce clonage profond nécessite que l'objet soit sérialisable via [Serializable] ou ISerializable.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn