2014-11-14 71 views
0

我需要獲取其中另一個bool數組中的索引爲true的字符串數組的所有元素。 在C#中,我一直在尋找,但選擇我不知道如何在指數使用select和bool數組篩選字符串數組

String[] ContentArray = {"Id","Name","Username"}; 
bool[] SelectionArray = {false,true,false}; 
+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-11-14 15:58:20

回答

3

我想你使用正在尋找:

IEnumerable<string> strings = 
    ContentArray.Where((str, index) => SelectionArray[index]); 

這對於你的榜樣將產生IEnumerable<string>"Name"

但是,如果您的SelectionArray比您的ContentArray短,您將得到一個索引越界異常。

如果可能的話,你可以簡單地增加一個長度檢查,假設你想比SelectionArray長度更大的索引返回false

IEnumerable<string> strings = 
    ContentArray.Where(
     (str, index) => index < SelectionArray.Length && SelectionArray[index]); 
+0

你擊敗了我,因爲我在選項卡上.. – 2014-11-14 15:58:37

+1

有一個覆蓋'哪裏'給你[索引](http://msdn.microsoft.com/en-us/library/vstudio/bb549418(v = vs .100)的.aspx)。 – juharr 2014-11-14 15:58:56

+0

@juharr:啊!謝謝,我沒有意識到這一點。 – 2014-11-14 15:59:51

1

你也可以使用IEnumerable.Zip()。這裏有一個例子:

class Program 
{ 
    static void Main(string[] args) 
    { 
     String[] ContentArray = { "Id", "Name", "Username" }; 
     bool[] SelectionArray = { false, true, false }; 

     var selected = ContentArray.Zip(SelectionArray, (s, b) => 
      new Tuple<string, bool>(s, b)) 
      .Where(tuple => tuple.Item2) 
      .Select(tuple => tuple.Item1) 
      .ToList(); 

     foreach (var s in selected) 
     { 
      Console.WriteLine(s); 
     } 

     Console.ReadLine(); 
    } 
} 
+0

郵編爲+1,但您可以使用匿名類型而不是元組 – 2014-11-14 16:03:17

+0

是的 - 但我認爲示例說明了這一點。如此多種方法來撫平這隻貓...... :) – code4life 2014-11-14 16:04:41