在C#中过滤数组

时间:2009-12-16 03:47:09

标签: c# arrays

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

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

6 个答案:

答案 0 :(得分:56)

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

using System.Linq;

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

如果您无法访问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();
}

答案 1 :(得分:17)

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

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

如果是List<Car>,则还有List.FindAll

答案 2 :(得分:1)

最简单的方法:

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

可能效率更高:

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();

答案 3 :(得分:1)

一个简单的解决方案是创建一个新数组,遍历输入数组并仅将满足条件的项添加到新数组中,并返回新数组:

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.

答案 4 :(得分:0)

var available = from c in cars where c.IsAvailable == true select c;

或者

var available = cars.Where(c => c.IsAvailable == true);

答案 5 :(得分:-5)

当满足以下条件时,数组是过滤器数组:

  1. 如果列表中存在9,则13也必须存在
  2. 如果列表中存在7,则11必须不存在
  3. 解决方案

    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]);
    }
    

    我认为如果您需要测试阵列,这段代码肯定有效  零售seboka ambo universtity woliso campuse信息部门TECH。!!