如何知道哪个布尔值为真
本文关键字:布尔值 何知道 | 更新日期: 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
循环并对数组进行迭代。