我需要獲取其中另一個bool數組中的索引爲true的字符串數組的所有元素。 在C#中,我一直在尋找,但選擇我不知道如何在指數使用select和bool數組篩選字符串數組
String[] ContentArray = {"Id","Name","Username"};
bool[] SelectionArray = {false,true,false};
我需要獲取其中另一個bool數組中的索引爲true的字符串數組的所有元素。 在C#中,我一直在尋找,但選擇我不知道如何在指數使用select和bool數組篩選字符串數組
String[] ContentArray = {"Id","Name","Username"};
bool[] SelectionArray = {false,true,false};
我想你使用正在尋找:
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]);
你擊敗了我,因爲我在選項卡上.. – 2014-11-14 15:58:37
有一個覆蓋'哪裏'給你[索引](http://msdn.microsoft.com/en-us/library/vstudio/bb549418(v = vs .100)的.aspx)。 – juharr 2014-11-14 15:58:56
@juharr:啊!謝謝,我沒有意識到這一點。 – 2014-11-14 15:59:51
你也可以使用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();
}
}
郵編爲+1,但您可以使用匿名類型而不是元組 – 2014-11-14 16:03:17
是的 - 但我認爲示例說明了這一點。如此多種方法來撫平這隻貓...... :) – code4life 2014-11-14 16:04:41
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-11-14 15:58:20