« Tableaux » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
 
(Une version intermédiaire par le même utilisateur non affichée)
Ligne 100 : Ligne 100 :
<kode lang='cs'>
<kode lang='cs'>
// nb rows, nb columns
// nb rows, nb columns
var matrix = /*new int[3,4]*/
var matrix = new int[3,4];
matrix[0,0] = 1:
 
int[,] matrix =
{
{
     { 1, 2, 3, 4 },
     { 1, 2, 3, 4 },
Ligne 107 : Ligne 110 :
};
};


// get length by dimension
int rowLength = matrix.GetLength(0); // 3
int rowLength = matrix.GetLength(0); // 3
int colLength = matrix.GetLength(1); // 4
int colLength = matrix.GetLength(1); // 4

Dernière version du 22 janvier 2024 à 13:52

Déclaration

Csharp.svg
// 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>.

Csharp.svg
// 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

Csharp.svg
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

Cs.svg
// 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

Csharp.svg
string s = String.Join(",", myStringArray));

Matrix / Multidimensional arrays

Cs.svg
// 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();
    }
}