filtrer un tableau en C#

J'ai un tableau d'objets (Car [] par exemple) et il y a une propriété IsAvailable sur l'objet

Je veux utiliser le tableau complet (où IsAvailable est true pour certains éléments et false pour d'autres) comme entrée et retourner un nouveau tableau qui inclut uniquement les éléments qui ont IsAvailable = true.

29
demandé sur leora 2009-12-16 06:47:08

6 réponses

Si vous utilisez C # 3.0 ou mieux...

public Car[] Filter(Car[] input)
{
    return input.Where(c => c.IsAvailable).ToArray();
}

Et si vous n'avez pas accès à LINQ (vous utilisez une ancienne version de. NET) ...

public Car[] Filter(Car[] input)
{
    List<Car> availableCars = new List<Car>();

    foreach(Car c in input)
    {
        if(c.IsAvailable)
            availableCars.Add(c);
    }

    return availableCars.ToArray();
}
50
répondu Justin Niessner 2009-12-16 21:11:17

Étonnamment, cette question manque de la réponse la plus naturelle et efficace: Array.FindAll

Car[] availableCars = Array.FindAll(cars, c => c.IsAvailable);

Si c'était un List<Car> il est également un List.FindAll.

14
répondu Tim Schmelter 2016-09-20 01:09:58

Moyen le plus simple:

Car[] cars = //...
Car[] filtered = cars.Where(c => c.IsAvailable).ToArray();

Peut-Être Plus Efficace:

Car [] cars = //...
    List<Car> filteredList = new List<Car>();
    for(int i = 0; i < cars.Length; i++)
    {
        if(cars[i].IsAvailable)
           filteredList.Add(cars[i]);
    }
    Car[] filtered = filteredList.ToArray();
1
répondu LorenVS 2009-12-16 03:49:45

Une solution simple consiste à créer un nouveau tableau, à parcourir le tableau d'entrée et à ajouter uniquement les éléments qui satisfont vos conditions au nouveau tableau, et à renvoyer le nouveau tableau:

List<Car> available = new List<Car>();
foreach (Car c in cars) {
    if (c.IsAvailable) {
        available.add(c);
    }
}
//Here you can either just return the list, or create an array from it.
1
répondu goatlinks 2009-12-16 03:59:30
var available = from c in cars where c.IsAvailable == true select c;

Ou

var available = cars.Where(c => c.IsAvailable == true);
0
répondu Jim Wallace 2012-01-24 16:30:28

Un tableau est un tableau de filtres lorsqu'il remplit les conditions suivantes:

  1. si 9 existe dans la liste 13 doit également exister
  2. Si 7 existe dans la liste, alors 11 ne doit pas exister

Solution

int[] a = {7 , 72, 6, 13, 9 };
int i, k = 0, l = 0, m = 0, n = 0;
for (i = 0; i < a.Length; i++)
{
    if (a[i] == 9)
    {
        k = 1;
    }
}
for (i = 0; i < a.Length; i++)
{
    if (a[i] == 13)
    {
        l = 1;
    }
}
for (i = 0; i < a.Length; i++)
{
    if (a[i] == 7)
    {
        m = 1;
    }
}
for (i = 0; i < a.Length; i++)
{
    if (a[i] == 11)
    {
        n= 1;
    }
}
if ((k == 1 && l == 1) && (m == 1 && n == 1))
{
    Console.WriteLine("is not filter array");
}
else if (k == 1 && l!= 1)
{
    Console.WriteLine("is not filter array");
}
else if (m ==1 && n==1)
{
    Console.WriteLine("is not filter array ");
}
else
    Console.WriteLine("is filter array");
Console.WriteLine("the element of an array is:");
for (i = 0; i < a.Length; i++)
{
    Console.WriteLine(a[i]);
}

Comme je pense que ce code fonctionne sûrement si vous avez besoin de tester un tableau.
reta seboka ambo universtity woliso campuse département de technologie de l'information.!!

-5
répondu reta seboka meskele 2013-12-26 14:42:56