linq 的FirstOrDefault如何知道是第几个元素

时间:2023-01-03 12:16:00
比如一个数组
 1  4  6  9  7
 
找出第一个3的倍数的数字 为6
list.FirstOrDefault(a=>a%3==0) 
但是我要找出它的位置 2 
应该如何做?

10 个解决方案

#1


我是问 linq里面有没有这种方法
如果用for循环 肯定没问题了.

#2


额 好蛋疼  linq 的FirstOrDefault如何知道是第几个元素
马上就找到了方法...
list.IndexOf(list.FirstOrDefault(a => a % 2 == 0))


谁来接分了..
第一个就送了.

#3


list.Select((x, i) => new { x, i }).FirstOrDefault(x=> x.x % 3 == 0).i; 

#4


list.FindIndex(a => a % 3 == 0);

#5


引用 4 楼 guwei4037 的回复:
list.FindIndex(a => a % 3 == 0);

其实当初我对linq的感觉中,就是应该有这个函数的,但我找了下,没找到啊.
我是4.0 难道这是4.5版linq独有的?

#6


引用 5 楼 sj178220709 的回复:
Quote: 引用 4 楼 guwei4037 的回复:

list.FindIndex(a => a % 3 == 0);

其实当初我对linq的感觉中,就是应该有这个函数的,但我找了下,没找到啊.
我是4.0 难道这是4.5版linq独有的?

是的,4.5以下不支持FindIndex。可以使用3楼的写法。
list.Select((x, i) => new { x, i }).FirstOrDefault(x => x.x % 3 == 0).i

#7


引用 3 楼 caozhy 的回复:
list.Select((x, i) => new { x, i }).FirstOrDefault(x=> x.x % 3 == 0).i; 


额 ,原来我对select的理解这么肤浅么?
linq 的FirstOrDefault如何知道是第几个元素

linq 的FirstOrDefault如何知道是第几个元素

问下曹版,Func<int ,int 'a> 表示接受一个参数int int返回匿名类型的委托
那Select<int,'a>这句又该怎么理解呢?

#8


它有两个重载的形式。

#9


 Array.FindIndex(list,a => a % 3 == 0);

#10


引用 7 楼 sj178220709 的回复:
Quote: 引用 3 楼 caozhy 的回复:

list.Select((x, i) => new { x, i }).FirstOrDefault(x=> x.x % 3 == 0).i; 


额 ,原来我对select的理解这么肤浅么?
linq 的FirstOrDefault如何知道是第几个元素

linq 的FirstOrDefault如何知道是第几个元素

问下曹版,Func<int ,int 'a> 表示接受一个参数int int返回匿名类型的委托
那Select<int,'a>这句又该怎么理解呢?

Select的函数原型是
TResult Select<T, TResult>(this IEnumerable<T> data, Func<T, int, TResult> selector)
那么VS自动类型推定出int和'a后提示就是
代换到里面就是Select<int, 'a>,Func<int, int, 'a>了。

#1


我是问 linq里面有没有这种方法
如果用for循环 肯定没问题了.

#2


额 好蛋疼  linq 的FirstOrDefault如何知道是第几个元素
马上就找到了方法...
list.IndexOf(list.FirstOrDefault(a => a % 2 == 0))


谁来接分了..
第一个就送了.

#3


list.Select((x, i) => new { x, i }).FirstOrDefault(x=> x.x % 3 == 0).i; 

#4


list.FindIndex(a => a % 3 == 0);

#5


引用 4 楼 guwei4037 的回复:
list.FindIndex(a => a % 3 == 0);

其实当初我对linq的感觉中,就是应该有这个函数的,但我找了下,没找到啊.
我是4.0 难道这是4.5版linq独有的?

#6


引用 5 楼 sj178220709 的回复:
Quote: 引用 4 楼 guwei4037 的回复:

list.FindIndex(a => a % 3 == 0);

其实当初我对linq的感觉中,就是应该有这个函数的,但我找了下,没找到啊.
我是4.0 难道这是4.5版linq独有的?

是的,4.5以下不支持FindIndex。可以使用3楼的写法。
list.Select((x, i) => new { x, i }).FirstOrDefault(x => x.x % 3 == 0).i

#7


引用 3 楼 caozhy 的回复:
list.Select((x, i) => new { x, i }).FirstOrDefault(x=> x.x % 3 == 0).i; 


额 ,原来我对select的理解这么肤浅么?
linq 的FirstOrDefault如何知道是第几个元素

linq 的FirstOrDefault如何知道是第几个元素

问下曹版,Func<int ,int 'a> 表示接受一个参数int int返回匿名类型的委托
那Select<int,'a>这句又该怎么理解呢?

#8


它有两个重载的形式。

#9


 Array.FindIndex(list,a => a % 3 == 0);

#10


引用 7 楼 sj178220709 的回复:
Quote: 引用 3 楼 caozhy 的回复:

list.Select((x, i) => new { x, i }).FirstOrDefault(x=> x.x % 3 == 0).i; 


额 ,原来我对select的理解这么肤浅么?
linq 的FirstOrDefault如何知道是第几个元素

linq 的FirstOrDefault如何知道是第几个元素

问下曹版,Func<int ,int 'a> 表示接受一个参数int int返回匿名类型的委托
那Select<int,'a>这句又该怎么理解呢?

Select的函数原型是
TResult Select<T, TResult>(this IEnumerable<T> data, Func<T, int, TResult> selector)
那么VS自动类型推定出int和'a后提示就是
代换到里面就是Select<int, 'a>,Func<int, int, 'a>了。