« Tableaux » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(7 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:CSharp]] | |||
= Déclaration = | = Déclaration = | ||
<kode lang="csharp"> | <kode lang="csharp"> | ||
Ligne 50 : | Ligne 51 : | ||
if (Array.IndexOf(monTableau, element) > -1) | if (Array.IndexOf(monTableau, element) > -1) | ||
</kode> | |||
= [https://docs.microsoft.com/en-us/troubleshoot/dotnet/csharp/use-icomparable-icomparer Sort] = | |||
<kode lang='cs'> | |||
// sort the array by absolute value | |||
Array.Sort(ints, (i1, i2) => | |||
{ | |||
var a1 = Math.Abs(i1); | |||
var a2 = Math.Abs(i2); | |||
if (a1 > a2) | |||
return 1; | |||
else if (a1 < a2) | |||
return -1; | |||
else | |||
return 0; | |||
}); | |||
Array.Sort(ints, new IntAbsoluteValueComparer ()); | |||
private class IntAbsoluteValueComparer : IComparer | |||
{ | |||
int IComparer.Compare(object a, object b) | |||
{ | |||
var a1 = Math.Abs((int)a); | |||
var a2 = Math.Abs((int)b); | |||
if (a1 > a2) | |||
return 1; | |||
if (a1 < a2) | |||
return -1; | |||
else | |||
return 0; | |||
} | |||
} | |||
</kode> | </kode> | ||
Ligne 57 : | Ligne 97 : | ||
</kode> | </kode> | ||
[[ | = [https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/arrays#multidimensional-arrays Matrix / Multidimensional arrays] = | ||
<kode lang='cs'> | |||
// nb rows, nb columns | |||
var matrix = new int[3,4]; | |||
matrix[0,0] = 1: | |||
int[,] matrix = | |||
{ | |||
{ 1, 2, 3, 4 }, | |||
{ 1, 2, 3, 4 }, | |||
{ 1, 2, 3, 4 } | |||
}; | |||
// get length by dimension | |||
int rowLength = matrix.GetLength(0); // 3 | |||
int colLength = matrix.GetLength(1); // 4 | |||
var newMatrix = new int[rowLength, colLength]; // [3,4] | |||
Array.Copy(matrix, 0, newMatrix, 0, matrix.Length); | |||
var max = matrix.Cast<int>().Max(); | |||
static void PrintMatrix (int[,] matrix) | |||
{ | |||
int rowLength = matrix.GetLength(0); | |||
int colLength = matrix.GetLength(1); | |||
for (int row = 0; row < rowLength; row++) | |||
{ | |||
for (int column = 0; column < colLength; column++) | |||
{ | |||
Console.Write($"{matrix[row, column]} "); | |||
} | |||
Console.WriteLine(); | |||
} | |||
} | |||
</kode> |
Dernière version du 22 janvier 2024 à 13:52
Déclaration
// il faut spécifié le type (string[]) pour pouvoir utiliser cette écriture string[] strArray = { "string1", "string2" }; var strArray = new [] { "string1", "string2" }; var strArray = new [,] { { "string11", "string12" }, { "string21", "string22" } }; var strArray = new string[10]; // tableau vide var strArray = Array.Empty<string>(); |
Convertir explicitement un tableau en IEnumerable<T>
Un cast implicite existe en un tableau et un IEnumerable<T>.
Néanmoins dans certain cas on souhaite explicitement caster le tableau en IEnumerable<T>.
// Exemple de cas ou l'on souhaite explicitement caster le tableau en IEnumerable<T> Methode(IEnumerable<int> items) {...} Methode(params int[] items) {...} int[] array = {1, 2}; Methode(array); // appel de la seconde occurence : Methode(params int[] items) // pour pouvoir appeler la première occurence : Methode(IEnumrable<int> items) // il faut explicitement caster le tableau en IEnumerable<T> IEnumerable<int> enumerable = array.AsEnumerable(); IEnumerable<int> enumerable = (IEnumerable<int>)array; IEnumerable<int> enumerable = array.Cast<int>(); // performance pour la convertion de int[] en IEnumerable<int> sur 1000000 passes : // 0.032s items.AsEnumerable() // 0.321s (IEnumerable<int>)items // 0.492s items.Cast<int>() |
IndexOf / Contains
int index = Array.IndexOf(monTableau, element); // test si un élément est présent dans le tableau using System.Linq; if(monTableau.Contains(element)) if (Array.IndexOf(monTableau, element) > -1) |
Sort
// sort the array by absolute value Array.Sort(ints, (i1, i2) => { var a1 = Math.Abs(i1); var a2 = Math.Abs(i2); if (a1 > a2) return 1; else if (a1 < a2) return -1; else return 0; }); Array.Sort(ints, new IntAbsoluteValueComparer ()); private class IntAbsoluteValueComparer : IComparer { int IComparer.Compare(object a, object b) { var a1 = Math.Abs((int)a); var a2 = Math.Abs((int)b); if (a1 > a2) return 1; if (a1 < a2) return -1; else return 0; } } |
Tableau de string → string
string s = String.Join(",", myStringArray)); |
Matrix / Multidimensional arrays
// nb rows, nb columns var matrix = new int[3,4]; matrix[0,0] = 1: int[,] matrix = { { 1, 2, 3, 4 }, { 1, 2, 3, 4 }, { 1, 2, 3, 4 } }; // get length by dimension int rowLength = matrix.GetLength(0); // 3 int colLength = matrix.GetLength(1); // 4 var newMatrix = new int[rowLength, colLength]; // [3,4] Array.Copy(matrix, 0, newMatrix, 0, matrix.Length); var max = matrix.Cast<int>().Max(); static void PrintMatrix (int[,] matrix) { int rowLength = matrix.GetLength(0); int colLength = matrix.GetLength(1); for (int row = 0; row < rowLength; row++) { for (int column = 0; column < colLength; column++) { Console.Write($"{matrix[row, column]} "); } Console.WriteLine(); } } |