如何捕获索引位置的BOOL数组

本文关键字:BOOL 数组 位置 何捕获 索引 | 更新日期: 2023-09-27 18:17:05

我有一个Bool数组,我需要捕获元素为真的所有索引数。如何做到这一点?

这是我目前看到的

bool[] keepPageArray;
StringBuilder PageOneIndexLocation = new StringBuilder(50000);
//Assign the bool array
 keepPageArray = new bool[document.Pages.Count];
// Processing is done here to give each index location value of true or false 
//below is where I am having difficulty
  for (int i = 0; i <= keepPageArray.Length - 1; i++) 
            {
                if (keepPageArray[i].ToString() == "True")
                {
                    PageOneIndexLocation.Append(i); 
                    PageOneIndexLocation.Append(';');
                }
当我运行 程序时,pagoneindexlocation的

结果是这样的

  • PageOneIndexLocation {0;0;1;0;1;2;0;1;2;3;0;1;2;3} System.Text.StringBuilder

我期待的是什么PageOneIndexLocation{0;1;2;4;6;7;8;10;}这里的数字表示bool数组中所有为真的位置

请告诉我哪里做错了

如何捕获索引位置的BOOL数组

Replace

 if (keepPageArray[i].ToString() == "True")

if (keepPageArray[i])

您可以使用Lambda queryString.Join方法而不使用循环,如下所示。

//Example of your bool array
bool[] keepPageArray = new bool[] {true, true, true, false, true, false, true,
                                       true, true, false,true};
//Get the index of true values  
var trues = keepPageArray.Select((b, index) => new {Index = index, Val =b})
                         .Where(b=> b.Val)
                         .Select(b=> b.Index)
                         .ToList();
//String concatenation using Join method                             
string myString = string.Join(";", trues);
//Print results 
Console.WriteLine(myString);
//Results: 0;1;2;4;6;7;8;10