假设我有数组string[] weekDays = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
,我想找出包含's'的数组元素的索引。我怎么能用Linq做到这一点?
我已经尝试了int[] indexOfDaysContainingS = weekDays.Where(day => day.Contains("s")).Select((day, index) => index).ToArray();
,但这会返回0,1,2
,因为它可能是在Where()子句之后得到过滤后的IEnumberable<string>
的索引。如果我首先放置Select(),那么我所拥有的只是索引,不能按天来过滤。
我需要更改哪些内容才能使其正常工作并返回1,2,3
?
答案 0 :(得分:36)
你可以这样做:
weekDays.Select((day, index) => new { Day = day, Index = index })
.Where(x => x.Day.Contains("s"))
.Select(x => x.Index)
.ToArray();
不确定这是否是最佳的..
答案 1 :(得分:15)
Patko的回答是一般情况下的方法。
以下是另外两个选项:
// Idea only works with collections that can be accessed quickly by index.
int[] indices = Enumerable.Range(0, weekDays.Length)
.Where(index => weekDays[index].Contains("s"))
.ToArray();
使用MoreLinq:
// Similar to Patko's idea, except using a 'named' type.
int[] indices = weekDays.AsSmartEnumerable()
.Where(item => item.Value.Contains("s"))
.Select(item => item.Index)
.ToArray();
答案 2 :(得分:-1)
这应该有效:
@SuppressWarnings("deprecation")
public class YourClassThatUsesHttpClient {
...
}