Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IEnumerable.Select with index

I have the following code:

 var accidents = text.Skip(NumberOfAccidentsLine + 1).Take(numberOfAccidentsInFile).ToArray();

where accidents is an array of strings.

I want to make a Linq transformation from the string array to an array of Accident objects as follows:

 return accidents.Select(t => new Accident() {Id = i, Name = t.Replace("\"", string.Empty)}).ToArray();

How do I retrieve the index i from the accidents array using Linq or do I have to go old school?

like image 712
Klaus Nji Avatar asked Dec 04 '14 02:12

Klaus Nji


2 Answers

I'm not sure what kind of index you're looking for, but if it's just set of consecutive numbers then you're lucky. There is Select overload that does exactly that:

return accidents.Select((t, i) => new Accident() {Id = i, Name = t.Replace("\"", string.Empty)}).ToArray();

It expects a delegate that takes two parameters - the item and its index.

like image 188
MarcinJuraszek Avatar answered Oct 02 '22 08:10

MarcinJuraszek


Use Enumerable.Range to generate the ID values and then use the current value to index into your String Array:

Enumerable.Range(0, accidents.Length).Select(f => new Accident() { Id = f, Name = accidents[f] })
like image 45
Mike Burdick Avatar answered Oct 02 '22 08:10

Mike Burdick