IEnumerable.Select with index

橙三吉。 提交于 2019-12-18 07:44:28

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!