C# 函数或两个使用者函数。我正在努力使它更漂亮。这取决于这样一个事实:Enumerable.Zip()交替调用每个序列的枚举数,显然第二个枚举数在第一个之前被调用,这意味着这个解决方案可能并不总是有效,或者在未来版本的.Net.Net中可能会突然停止工作,这是
C# 函数或两个使用者函数。我正在努力使它更漂亮。这取决于这样一个事实:Enumerable.Zip()交替调用每个序列的枚举数,显然第二个枚举数在第一个之前被调用,这意味着这个解决方案可能并不总是有效,或者在未来版本的.Net.Net中可能会突然停止工作,这是,c#,algorithm,linq,ienumerable,enumerator,C#,Algorithm,Linq,Ienumerable,Enumerator,函数或两个使用者函数。我正在努力使它更漂亮。这取决于这样一个事实:Enumerable.Zip()交替调用每个序列的枚举数,显然第二个枚举数在第一个之前被调用,这意味着这个解决方案可能并不总是有效,或者在未来版本的.Net.Net中可能会突然停止工作,这是正确的。但是,我确实需要将对象作为列表而不是单独的对象(批处理)使用。如果您无法控制这两个消费函数,那么如何使它们在每次输入后产生返回值?@BlueRaja正是我答案的重点,这一点被否决了。很有趣。这将把IEnumerable投影到IEnume
函数或两个使用者函数。我正在努力使它更漂亮。这取决于这样一个事实:
Enumerable.Zip()
交替调用每个序列的枚举数,显然第二个枚举数在第一个之前被调用,这意味着这个解决方案可能并不总是有效,或者在未来版本的.Net.Net中可能会突然停止工作,这是正确的。但是,我确实需要将对象作为列表而不是单独的对象(批处理)使用。如果您无法控制这两个消费函数,那么如何使它们在每次输入后产生返回值?@BlueRaja正是我答案的重点,这一点被否决了。很有趣。这将把IEnumerable
投影到IEnumerable
,IEnumerable
或者我必须修改DoSomethingWithChicken/Goat
才能使用吗?如果你想在类似流的模型中这样做(即不创建任何其他集合来积累项目),你需要编写一些函数来分别接受每个元素,但实际上,Rx中有一些函数可以将可观察值转换为可枚举值,后者正是我感兴趣的。我要下载Rx,看看我能用它做些什么,我会重新考虑这个问题,如果它能做到的话,我会改变被接受的答案。
struct AnimalCount
{
int Chickens;
int Goats;
}
IEnumerable<AnimalCount> FarmsInEachPen()
{
....
yield new AnimalCount(x, y);
....
}
ConsumeChicken(IEnumerable<int>);
ConsumeGoat(IEnumerable<int>);
ConsumeChicken(FarmsInEachPen().Select(x => x.Chickens));
ConsumeGoats(FarmsInEachPen().Select(x => x.Goats));
foreach(var animal in animals)
{
ConsomeChicken(animal.Chickens);
ConsomeGoat(animal.Goats);
}
from a in animals
group a by 0 into g
select new
{
TotalChickens = g.Sum(x => x.Chickens),
TotalGoats = g.Sum(x => x.Goats)
}
private static IEnumerable<object> ConsumeChickens(IEnumerable<int> xList)
{
foreach (var x in xList)
{
Console.WriteLine("X: " + x);
yield return null;
}
}
private static IEnumerable<object> ConsumeGoats(IEnumerable<int> yList)
{
foreach (var y in yList)
{
Console.WriteLine("Y: " + y);
yield return null;
}
}
private static IEnumerable<int> SelectHelper(IEnumerator<AnimalCount> enumerator, int i)
{
bool c = i != 0 || enumerator.MoveNext();
while (c)
{
if (i == 0)
{
yield return enumerator.Current.Chickens;
c = enumerator.MoveNext();
}
else
{
yield return enumerator.Current.Goats;
}
}
}
private static void Main(string[] args)
{
var enumerator = GetAnimals().GetEnumerator();
var chickensList = ConsumeChickens(SelectHelper(enumerator, 0));
var goatsList = ConsumeGoats(SelectHelper(enumerator, 1));
var temp = chickensList.Zip(goatsList, (i, i1) => (object) null);
temp.ToList();
Console.WriteLine("Total iterations: " + iterations);
}
var observable = new Subject<Animals>()
observable.Do(x=> DoSomethingWithChicken(x. Chickens))
observable.Do(x=> DoSomethingWithGoat(x.Goats))
foreach(var item in FarmsInEachPen())
{
observable.OnNext(item)
}