2009-12-16 115 views
24

我有對象的數組(車載[]例如)並且有一個IsAvailable屬性的對象上濾波器在C#陣列

我想使用的全陣列(其中IsAvailable爲一些項目真實和爲其他人爲false)作爲輸入並返回一個只包含IsAvailable = true的項的新數組。

回答

43

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

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(); 
} 
+0

考慮到LINQ的實現是基於IQueryable的,它的實現怎麼會比基於List的更好呢? – LorenVS 2009-12-16 03:54:19

+0

IEnumerable ***(15chars) – LorenVS 2009-12-16 03:54:51

+0

不是。我發佈了它,以防OP使用舊版本的.NET。如果OP需要性能最高的代碼,他們至少可以從第二個例子中得到想法......並對其進行優化以滿足他們的需求。 – 2009-12-16 03:55:52

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(); 
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. 
+0

你有java的foreach,我相信... – LorenVS 2009-12-16 03:53:11

+0

Aww drat。你是對的=) – goatlinks 2009-12-16 04:00:06

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

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

可以省略顯式比較對'''true''',即:'var'available = cars.Where(c => c.IsAvailable);''' – 2014-12-23 16:10:29

-5

陣列是濾光器陣列時,它滿足以下條件:

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

因爲我認爲這個代碼是可靠地如果你需要測試一個數組的話可以工作。
reta seboka ambo universtity woliso campuse信息技術部。

+0

這不是過濾數組。這是返回某些值是否在數組中,以非常糟糕的方式。 – Archer 2014-02-12 11:54:19

10

出人意料的是,這個問題缺乏最自然,最有效的答案:Array.FindAll

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

,如果它是一個List<Car>還出現了一個List.FindAll

+0

我調整了你的介紹。沒什麼大不了的,但我希望我在那裏正確理解你。 – jpaugh 2016-09-20 01:10:52