gpt4 book ai didi

c# - 如何将 bool 列表折叠成整数列表

转载 作者:太空狗 更新时间:2023-10-30 00:30:38 24 4
gpt4 key购买 nike

如果我有一个 bool 值列表,我如何使用 LINQ 转换成一个整数列表(或任何其他 IEnnumerable<int>),其中每个整数代表每个 bool 值字符串的长度?

例如{true, true, false, false, true, true, true}会变成{2, 3}作为 true 的第一轮s是2长,second是3长。还是我必须回到 for 和 foreach 循环?

我对假值的数量不感兴趣,它们之所以重要,只是因为它们将真值的运行分开。

所以 {true, true, true, false, true, true, true, true, false, false, true, true, true}会变成{3, 4, 3}

最佳答案

像这样:

public static class IEnumerableExt
{
public static IEnumerable<int> ConsecutiveTrues(this IEnumerable<bool> bools)
{
var flag=false;
int count=0;
foreach(var b in bools)
{
if (b)
{
count++;
} else if (flag)
{
yield return count;
count=0;
}
flag=b;
}
if (flag)
yield return count;
}
}

然后像这样使用:

void Main()
{
var bools=new bool[]{true, true, false, false, true, true, true};
var results=bools.ConsecutiveTrues();
}

使用纯 LINQ 方式(主要取自 https://stackoverflow.com/a/27574266/856353 ):

var str = new bool[]{true, true, true, false, true, true, true, true, false, false, true, true, true};

// Retain a horrid mutable sequence which tracks consecutive characters
var sequence = 0;
var grps = str
.Zip((str.Concat(new bool[]{str.Last()})).Skip(1),
(prev, current) => new { prev, current })
.GroupBy(p => new {
Ch = p.prev,
Sequence = p.current == p.prev
? sequence
: sequence++})
.Where(l=>l.Key.Ch==true)
.Select(l=>l.Count());

关于c# - 如何将 bool 列表折叠成整数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34363174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com