问题
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?
回答1:
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.
回答2:
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] })
回答3:
May be this LINQ query will help you to find The formated name with Index:
var accidents=(from acc in accidents
select new {
id=accidents.IndexOf(acc),
Name = acc.Replace("\"", string.Empty)
}).ToArray()
or you can also use .ToList()
for the case if you want result to be in IEnumerable format.
来源:https://stackoverflow.com/questions/27285061/ienumerable-select-with-index