Aşağıdaki kodu kullanarakLinq's TakeWhile'den 1 tane daha öğe nasıl alabilirim?
(ilgilenilen kod satırı geri kalanı tam temsil için sadece olduğunu, sonuncusu), ben gerekli maksimum oy aştı kadar seçmenleri almak istedim, ama doğru durur Bu maksimum oy sayısına ulaşmadan önce, seçmenler havuzunun istediğimden 1 tane daha az oyu var.
LINQ'da temiz bir yol var mı? Oy verebilseydim, oysa maksimum sayıya ulaştı mı? Bir seçmen daha ekleyebilirim ya da bunu bir döngüde yapabilirim ama bunun yerine LINQ ile bunu yapmanın iyi bir yolu olup olmadığını merak ediyorum.
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));
Not: Unutmayın 'seslerSoFar', döngüdeki sonu doğru değil, bir yardımcı değişken atıyor. – Kobi
+1 Gereksiz bir uzantı yöntemi yazmak gerektirmeyen bir çözüm için. –
Garip ama hiçbir şey göstermek için ilk sürümü alamıyorum ... Tek liner mükemmel çalışıyor olsa da. –