Zarif bir şekilde eğer birden fazla boolean olup olmadığını belirlemek "true"
Beş boolean değerleri bir dizi var. Eğer bunlardan birini daha doğruysa, belirli bir işlevi excecute istiyorum. Bana bir tek bu durumu kontrol etmek için izin verecek, aklınıza gelebilecek en zarif yolu vardır, ne deyim? Hedef dil C# ama diğer diller için de çözümler (dahili fonksiyonları belirli bahsediyoruz sürece) ilgileniyorum.
İlginç bir seçenek, bir bayt içinde Boolean değerleri saklamak doğru bir kayma yapmak ve orijinal bayt ile karşılaştırmak için. if(myByte && (myByte >> 1))
gibi bir şey Ama bu bir bayt (bitArray?) için ayrı mantıksal dönüştürme gerektirir ve biraz (cinas tasarlamak) sakar gibi[değiştir]Üzgünüm, bu olmalıdırif(myByte & (myByte - 1))
[/Düzenle]
Not: Bu ders klasik çok yakın "nüfus sayımı", "ayrıca yanlara doğru" ya da "Hamming ağırlığı" programlama problemi - ama pek aynı sayılmaz. Eğer birden fazla ise tek bit birçok ayarlanır bilmek ihtiyacım yok. Umudum, bunu yapmanın daha basit bir yolu var.
CEVAP
Hakkında
if ((bool1? 1:0) (bool2? 1:0) (bool3? 1:0)
(bool4? 1:0) (bool5? 1:0) > 1)
// do something
ya da yaygın bir yöntem
public bool ExceedsThreshold(int threshold, IEnumerable<bool> bools)
{
int trueCnt = 0;
foreach(bool b in bools)
if (b && ( trueCnt > threshold))
return true;
return false;
}
ya da diğer cevaplar önerdiği gibi SERİ kullanma
public bool ExceedsThreshold(int threshold, IEnumerable<bool> bools)
{ return bools.Count(b => b) > threshold; }
(Joel Coehoorn öneri eklemek için:DÜZENLE (.Net 2.x ve üstü)
public void ExceedsThreshold<T>(int threshold,
Action<T> action, T parameter,
IEnumerable<bool> bools)
{ if (ExceedsThreshold(threshold, bools)) action(parameter); }
ya da içinde .Net 3.5 ve daha sonra:
public void ExceedsThreshold(int threshold,
Action action, IEnumerable<bool> bools)
{ if (ExceedsThreshold(threshold, bools)) action(); }
ya IEnumerable<bool>
bir uzantısı olarak
public static class IEnumerableExtensions
{
public static bool ExceedsThreshold<T>
(this IEnumerable<bool> bools, int threshold)
{ return bools.Count(b => b) > threshold; }
}
kullanımı olacaktır:
var bools = new [] {true, true, false, false, false, false, true};
if (bools.ExceedsThreshold(3))
// code to execute ...
Nasıl " = = = var" dahili eğ...
Birden fazla "SERİ" sipariş...
Bir şekilde eğer bir dosyanın kullanım...
HTML: Tab boşluk yerine birden fazla b...
Böyle büyük mükafat uyarı: "Birde...