在C#中过滤数组

leo*_*ora 37 c# arrays

我有一个对象数组(例如Car [])并且对象上有一个IsAvailable属性

我想使用完整数组(其中IsAvailable对于某些项为true而对于其他项为false)作为输入并返回一个新数组,其中仅包含具有IsAvailable = true的项.

Jus*_*ner 65

如果你使用C#3.0或更好......

using System.Linq;

public Car[] Filter(Car[] input)
{
    return input.Where(c => c.IsAvailable).ToArray();
}
Run Code Online (Sandbox Code Playgroud)

如果您无法访问LINQ(您使用的是旧版本的.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();
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 22

令人惊讶的是,这个问题缺乏最自然,最有效的答案: Array.FindAll

Car[] availableCars = Array.FindAll(cars, c => c.IsAvailable);
Run Code Online (Sandbox Code Playgroud)

如果它是一个List<Car>也有一个List.FindAll.


Lor*_*nVS 5

最简单的方法:

Car[] cars = //...
Car[] filtered = cars.Where(c => c.IsAvailable).ToArray();
Run Code Online (Sandbox Code Playgroud)

可能更高效:

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();
Run Code Online (Sandbox Code Playgroud)