lundi 1 septembre 2025

Array



Questions / Réponses – C# Arrays

1. Qu’est-ce qu’un tableau (Array) en C# ?

  • Réponse :
    Un tableau est une collection fixe et ordonnée d’éléments de même type, indexés à partir de zéro. En C#, les tableaux dérivent de System.Array.


2. Quelle est la différence entre un Array et une List<T> ?

  • Réponse :

    • Array → taille fixe, accès rapide, allocation mémoire continue.

    • List<T> → taille dynamique, méthodes utilitaires (Add, Remove, Contains, etc.), basé en interne sur un tableau redimensionné automatiquement.


3. Comment déclarer et initialiser un tableau en C# ?

  • Réponse :

int[] numbers = new int[5];                  // déclaration avec taille
int[] values = new int[] { 1, 2, 3, 4 };    // initialisation directe
string[] fruits = { "Pomme", "Banane" };    // raccourci

4. Quelle est la différence entre Length, Rank et GetLength() ?

  • Réponse :

    • array.Length → nombre total d’éléments.

    • array.Rank → nombre de dimensions (1D, 2D, 3D...).

    • array.GetLength(dimension) → nombre d’éléments dans une dimension spécifique.


5. Comment copier un tableau en C# ?

  • Réponse :

int[] source = { 1, 2, 3 };
int[] copy = new int[source.Length];
Array.Copy(source, copy, source.Length);

⚠️ Affecter directement (copy = source) copie seulement la référence, pas les données.


6. Quelle est la différence entre tableau multidimensionnel et tableau de tableaux (jagged array) ?

  • Réponse :

    • Multidimensionnel : int[,] matrix = new int[3,3]; → vrai tableau rectangulaire.

    • Jagged array : int[][] jagged = new int[3][]; → tableau de références vers d’autres tableaux, pas forcément de même longueur.


7. Comment parcourir un tableau en C# ?

  • Réponse :

for (int i = 0; i < arr.Length; i++) { }
foreach (var item in arr) { }

8. Comment redimensionner un tableau en C# ?

  • Réponse :
    On utilise Array.Resize car la taille est fixe.

int[] arr = { 1, 2, 3 };
Array.Resize(ref arr, 5); // arr = {1,2,3,0,0}

9. Comment rechercher un élément dans un tableau ?

  • Réponse :

int[] arr = { 10, 20, 30 };
bool exists = arr.Contains(20);   // LINQ
int index = Array.IndexOf(arr, 30);

10. Comment trier un tableau ?

  • Réponse :

int[] arr = { 3, 1, 2 };
Array.Sort(arr); // résultat : {1,2,3}
Array.Reverse(arr); // inverser l’ordre

11. Qu’est-ce que Array.Clone() ?

  • Réponse :
    Clone() crée une copie superficielle (shallow copy) du tableau.
    Les éléments de type référence pointent vers les mêmes objets.


12. Peut-on avoir un tableau de types différents en C# ?

  • Réponse :
    Non, sauf si on déclare un object[]. Mais ce n’est pas recommandé car ça casse la sécurité de typage.


13. Différence entre Array.Clear() et Array.Resize() ?

  • Réponse :

    • Array.Clear(arr, 0, arr.Length) → met les valeurs à 0 ou null.

    • Array.Resize(ref arr, newSize) → change la taille en créant un nouveau tableau.


14. Comment convertir un tableau en List<T> et inversement ?

  • Réponse :

int[] arr = { 1, 2, 3 };
List<int> list = arr.ToList();
int[] back = list.ToArray();

15. Quels sont les avantages et inconvénients d’un tableau ?

  • Réponse :
    ✔️ Accès rapide (O(1)), mémoire contiguë.
    ❌ Taille fixe, manque de flexibilité, pas de méthodes intégrées comme Add ou Remove.





✅ Solutions – Arrays en C#

1. Trouver la valeur maximale

int MaxValue(int[] arr)
{
    int max = arr[0];
    foreach (int n in arr)
    {
        if (n > max)
            max = n;
    }
    return max;
}
// Exemple : MaxValue(new int[] {1, 5, 3}) → 5

2. Inverser un tableau

void ReverseArray(int[] arr)
{
    int left = 0, right = arr.Length - 1;
    while (left < right)
    {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left++;
        right--;
    }
}
// Exemple : [1,2,3,4] → [4,3,2,1]

3. Compter les occurrences

int CountOccurrences(int[] arr, int value)
{
    int count = 0;
    foreach (int n in arr)
    {
        if (n == value)
            count++;
    }
    return count;
}
// Exemple : CountOccurrences(new int[]{1,2,2,3}, 2) → 2

4. Fusionner deux tableaux

int[] MergeArrays(int[] arr1, int[] arr2)
{
    int[] merged = new int[arr1.Length + arr2.Length];
    Array.Copy(arr1, merged, arr1.Length);
    Array.Copy(arr2, 0, merged, arr1.Length, arr2.Length);
    return merged;
}
// Exemple : [1,2] + [3,4] → [1,2,3,4]

5. Tableau unique (sans doublons)

int[] RemoveDuplicates(int[] arr)
{
    return arr.Distinct().ToArray();
}
// Exemple : [1,2,2,3] → [1,2,3]

6. Rotation d’un tableau

int[] RotateLeft(int[] arr, int k)
{
    k = k % arr.Length; // au cas où k > arr.Length
    return arr.Skip(k).Concat(arr.Take(k)).ToArray();
}
// Exemple : [1,2,3,4,5], k=2 → [3,4,5,1,2]

7. Somme des éléments pairs

int SumEven(int[] arr)
{
    int sum = 0;
    foreach (int n in arr)
    {
        if (n % 2 == 0)
            sum += n;
    }
    return sum;
}
// Exemple : [1,2,3,4] → 6

8. Deuxième plus grand élément

int SecondLargest(int[] arr)
{
    int first = int.MinValue, second = int.MinValue;
    foreach (int n in arr)
    {
        if (n > first)
        {
            second = first;
            first = n;
        }
        else if (n > second && n < first)
        {
            second = n;
        }
    }
    return second;
}
// Exemple : [1,5,3,4] → 4

9. Rechercher un élément (linéaire)

bool LinearSearch(int[] arr, int value)
{
    foreach (int n in arr)
    {
        if (n == value)
            return true;
    }
    return false;
}
// Exemple : [1,2,3], chercher 2 → true

10. Tri à bulles (Bubble Sort)

void BubbleSort(int[] arr)
{
    int n = arr.Length;
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
// Exemple : [3,1,2] → [1,2,3]

Return

Aucun commentaire:

Enregistrer un commentaire

Array Lượt xem: