在C#中过滤数组

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

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

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

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

如果您无法访问LINQ(您使用的是旧版本的.NET)…

 public Car[] Filter(Car[] input) { List availableCars = new List(); foreach(Car c in input) { if(c.IsAvailable) availableCars.Add(c); } return availableCars.ToArray(); } 

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

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

如果它是List那么还有一个List.FindAll

最简单的方法:

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

可能更高效:

 Car [] cars = //... List filteredList = new List(); for(int i = 0; i < cars.Length; i++) { if(cars[i].IsAvailable) filteredList.Add(cars[i]); } Car[] filtered = filteredList.ToArray(); 

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

 List available = new List(); 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; 

要么

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

数组是满足以下条件的filter数组:

  1. 如果列表中存在9,则13也必须存在
  2. 如果列表中存在7,那么11必须不存在

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

我认为如果你需要测试一个数组,这个代码肯定会起作用。
lob seboka ambo universtity woliso campuse信息部门TECH。!!