【发布时间】:2017-11-03 00:02:10
【问题描述】:
(感兴趣的代码行是最后一行,其余的只是为了完整的表示)
使用下面的代码,我想要投票直到我超过所需的最大票数,但它在达到最大票数之前就停止了,所以我的选民池中的选民比我少 1通缉。
在 LINQ 中是否有一种干净的方式,我可以让它在达到最大票数之前进行投票?我知道我可以再添加一个投票者或循环执行此操作,但我很好奇是否有一种使用 LINQ 的好方法来代替。
var voters = new List<Person>
{
new Person("Alice", Vote.Yes ),
new Person("Bob", Vote.Yes),
new Person("Catherine", Vote.No),
new Person("Denzel", Vote.Yes),
new Person("Einrich", Vote.Abstain),
new Person("Frederica", Vote.Abstain),
new Person("Goeffried", Vote.Abstain),
};
voters.Single(c => c.Name == "Alice").Voices = 100;
voters.Single(c => c.Name == "Bob").Voices = 150;
voters.Single(c => c.Name == "Catherine").Voices = 99;
voters.Single(c => c.Name == "Denzel").Voices = 24;
voters.Single(c => c.Name == "Einrich").Voices = 52;
voters.Single(c => c.Name == "Frederica").Voices = 39;
voters.Single(c => c.Name == "Goeffried").Voices = 99;
// this takes voters until we are BEFORE reaching X voices...
int voicesSoFar = 0;
int voicesNeeded = 300;
var eligibleVoters = voters.TakeWhile((p => (voicesSoFar += p.Voices) < voicesNeeded ));
【问题讨论】: