用于有条件地获取列表项索引的Lambda表达式

Jim*_*mmy 10 c# lambda

我有一个List<bool>.我需要获取前n项的索引,其中item value = true.

例如以下列表项(bool)

10011001000

TopTrueIndexes(3) = The first 3 indexes where bits are true are 0, 3, 4 
TopTrueIndexes(4) = The first 4 indexes where bits are true are 0, 3, 4, 7 
Run Code Online (Sandbox Code Playgroud)

我怎么能为此写一个lambda?

Jon*_*eet 33

好吧,假设你有一些容易识别的条件,你可以做这样的事情,这将适用于任何 IEnumerable<T>:

var query = source.Select((value, index) => new { value, index })
                  .Where(x => x.value => Condition(value))
                  .Select(x => x.index)
                  .Take(n);
Run Code Online (Sandbox Code Playgroud)

(显然要填写Where条款的相应位.如果它只是一个List<bool>它可能只是x => x.value.)

最重要的位是您使用的过载Select拿到指标/值对之前Where,然后又Select得到公正的指标Where...并使用Take只得到第一个n结果.

  • 很好,我不知道你可以做Select((val,ind)=> ...).+1 (4认同)