【发布时间】:2009-12-16 03:47:08
【问题描述】:
我有一个对象数组(例如 Car[])并且对象上有一个 IsAvailable 属性
我想使用整个数组(其中 IsAvailable 对某些项目为真,而对另一些项目为假)作为输入并返回一个新数组,其中仅包含 IsAvailable = true 的项目。
【问题讨论】:
我有一个对象数组(例如 Car[])并且对象上有一个 IsAvailable 属性
我想使用整个数组(其中 IsAvailable 对某些项目为真,而对另一些项目为假)作为输入并返回一个新数组,其中仅包含 IsAvailable = true 的项目。
【问题讨论】:
如果您使用的是 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();
}
【讨论】:
using System.Linq;?
令人惊讶的是,这个问题缺乏最自然和最有效的答案:Array.FindAll
Car[] availableCars = Array.FindAll(cars, c => c.IsAvailable);
如果是List<Car>,那么还有List.FindAll。
【讨论】:
最简单的方法:
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();
【讨论】:
一个简单的解决方案是创建一个新数组,遍历输入数组,只将满足条件的项添加到新数组中,然后返回新数组:
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;
或者
var available = cars.Where(c => c.IsAvailable == true);
【讨论】:
true的显式比较,即:var available = cars.Where(c => c.IsAvailable);
满足以下条件的数组为过滤数组:
解决方案
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]);
}
如果您需要测试数组,我认为这段代码肯定适用。
reta seboka ambo 大学 woliso Campuse 信息技术系!!
【讨论】: