gpt4 book ai didi

c# - 在 lambda 表达式中产生返回值?

转载 作者:行者123 更新时间:2023-12-05 00:49:50 26 4
gpt4 key购买 nike

以下代码会将列表分成以“[”开头并以“]”结尾的子列表。如何将其转换为使用 yield return 以便它可以延迟处理非常大的流输入? --或者如何在 F# 中通过惰性枚举来实现它?--(没关系,我认为 f#implementation 应该是微不足道的)

var list = new List<string> { "[", "1", "2", "3", "]", "[", "2", "2", "]", "[", "3", "]" };
IEnumerable<IEnumerable<string>> result = Split(list);

static IEnumerable<IEnumerable<string>> Split(List<string> list)
{
return list.Aggregate(new List<List<string>>(), // yield return?
(sum, current) =>
{
if (current == "[")
sum.Add(new List<string>());
else if (current == "]")
return sum; // Convert to yield return?
else
sum.Last().Add(current);
return sum; // Convert to yield return?
});
}

最佳答案

C# 不支持匿名迭代器 block ,因此您只需使用命名方法而不是匿名方法。

public static IEnumerable<IEnumerable<string>> Split(IEnumerable<string> tokens)
{
using(var iterator = tokens.GetEnumerator())
while(iterator.MoveNext())
if(iterator.Current == "[")
yield return SplitGroup(iterator);
}

public static IEnumerable<string> SplitGroup(
IEnumerator<string> iterator)
{
while(iterator.MoveNext() && iterator.Current != "]")
yield return iterator.Current;
}

关于c# - 在 lambda 表达式中产生返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35473442/

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