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 deSystem.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 utiliseArray.Resizecar 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 unobject[]. 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 à0ounull. -
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 commeAddouRemove.
✅ 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]
Aucun commentaire:
Enregistrer un commentaire