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 renvoyer un nouveau tableau qui inclut uniquement les éléments dont IsAvailable = true.
Si vous utilisez C # 3.0 ou mieux ...
using System.Linq;
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();
}
Étonnamment, cette question manque de la réponse la plus naturelle et efficace: Array.FindAll
Car[] availableCars = Array.FindAll(cars, c => c.IsAvailable);
s'il s'agissait d'un List<Car>
, il existe également un List.FindAll
.
Manière la 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();
Une solution simple consiste à créer un nouveau tableau, à parcourir le tableau en entrée et à ajouter uniquement les éléments satisfaisant vos conditions au nouveau tableau, puis à 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.
var available = from c in cars where c.IsAvailable == true select c;
Ou
var available = cars.Where(c => c.IsAvailable == true);