如何知道哪个布尔值为真

本文关键字:布尔值 何知道 | 更新日期: 2023-09-27 18:21:53

根据这个线程优雅地确定是否有一个以上的布尔值是"真";

使用这部分代码。。。

public bool ExceedsThreshold(int threshold, IEnumerable<bool> bools)
{
   int trueCnt = 0;
   foreach(bool b in bools)
      if (b && (++trueCnt > threshold)) 
          ***//here i need to know which of b is the true***
          return true;
   return false;          
} 

我想知道bools变量中的哪一个是真的?

如何知道哪个布尔值为真

如果您想知道真值的索引,请使用包含索引参数的Select重载:

IList<int> indices = bools.Select((b, i) => new {Index = i, IsTrue = b})
                          .Where(x => x.IsTrue)
                          .Select(x => x.Index)
                          .ToList();

给定一个bool列表,这将返回一个为true的索引列表

var myList = new List<bool>{false, false, true, true, false};
// Will return an IEnumerable containing {2, 3}:
var trueStuff = myList.Select((value, pos) => pos).Where(pos => myList[pos]);

更新:正如下面的评论中所指出的,以上内容只适用于List,而不适用于IEnumerable。不过,我还是把它留在这里,因为它可能在另一个类似的情况下有用

此外,为了记录在案,这里有一个解决方案(尽管稍微不那么优雅)应该在任何一种情况下都有效:

// Note: IEnumerable this time:
IEnumerable<bool> myList = new List<bool> { false, false, true, true, false };
var trueStuff = new List<int>();
int pos = 0;
foreach (var b in myList)
{
    if(b){ trueStuff.Add(pos); }
    pos++;
}

我想知道bools变量中的哪一个是真的

这个使用LINQ

IList<bool> _result = bools.Where(x => x == true);

我不确定我是否正确理解了这一点,但如果你想知道枚举列表中的哪些Boolean值是true,哪些是false的,你可以将该例程修改为如下:

public static string GetBoolString(IEnumerable<bool> bools) 
{
  var boolArray = bools.ToArray();
  char[] data = new char[boolArray.Length];
  for (int i = 0; i < boolArray.Length; i++)
  {
    data[i] = boolArray[i] ? '1' : '0';
  }
  return new string(data);
}

请注意,我并没有提出任何"优雅"的解决方案;只是完成它。

var firsttrue = bools.First(b => b);

如果您从IEnumerable切换到具有内置索引的东西(如数组或List),您可以这样做,以返回一个真实的索引列表:

public IEnumerable<int> GetTrueIndices(bool[] b)
{
    return Enumerable.Range(0, b.Length).Where(i => b[i]);
}

如果有一个列表,它将是这样的:

public IEnumerable<int> GetTrueIndices(List<bool> b)
{
    return Enumerable.Range(0, b.Count).Where(i => b[i]);
}

如果要使用索引,请不要使用IEnumerable,而是使用数组。

要获取索引,请使用for循环并对数组进行迭代。