-1

このスレッドによると、複数のブール値が「真」であるかどうかをエレガントに判断します

コードのこの部分を使用して...

public bool ExceedsThreshold(int threshold, IEnumerable<bool> bools)
{
   int trueCnt = 0;
   foreach(bool b in bools)
      if (b && (++trueCnt > threshold)) 
          ***//here i need to know which of b is the true***
          return true;
   return false;          
} 

bools 変数のどれが true か知りたいですか?

4

7 に答える 7

2

のリストを指定すると、これは true であるインデックスboolのリストを返します。

var myList = new List<bool>{false, false, true, true, false};

// Will return an IEnumerable containing {2, 3}:
var trueStuff = myList.Select((value, pos) => pos).Where(pos => myList[pos]);

更新: 以下のコメントで指摘されているように、上記はリストに対してのみ機能し、IEnumerable に対しては機能しません。ただし、別の同様の状況で役立つ可能性があるため、ここに残しておきます。

また、記録のために、どちらの場合でも機能するはずのソリューションを次に示します (少しエレガントではありませんが)。

// Note: IEnumerable this time:
IEnumerable<bool> myList = new List<bool> { false, false, true, true, false };

var trueStuff = new List<int>();
int pos = 0;
foreach (var b in myList)
{
    if(b){ trueStuff.Add(pos); }
    pos++;
}
于 2013-07-10T13:47:51.560 に答える
1

これを正しく理解しているかどうかはわかりませんがBoolean、列挙されたリストのどの値がtrueで、どの値がfalseであるかを知りたい場合は、そのルーチンを次のように変更できます。

public static string GetBoolString(IEnumerable<bool> bools) 
{
  var boolArray = bools.ToArray();
  char[] data = new char[boolArray.Length];
  for (int i = 0; i < boolArray.Length; i++)
  {
    data[i] = boolArray[i] ? '1' : '0';
  }
  return new string(data);
}

「エレガントな」ソリューションを提示していないことに注意してください。それを成し遂げるだけです。

于 2013-07-10T13:50:55.167 に答える
-1

IEnumerable組み込みのインデックス (配列や など) を使用するものに切り替える場合はList、これを実行して、true であるインデックスのリストを返すことができます。

public IEnumerable<int> GetTrueIndices(bool[] b)
{
    return Enumerable.Range(0, b.Length).Where(i => b[i]);
}

リストを使用すると、次のようになります。

public IEnumerable<int> GetTrueIndices(List<bool> b)
{
    return Enumerable.Range(0, b.Count).Where(i => b[i]);
}
于 2013-07-10T13:41:56.260 に答える
-1
var firsttrue = bools.First(b => b);
于 2013-07-10T13:42:06.563 に答える
-2

IEnumerableインデックスを操作する場合は使用しないでください。ただし、配列を使用してください。

インデックスを取得するにはfor、ループを使用して配列を反復処理します。

于 2013-07-10T13:39:50.517 に答える