2014-12-04 78 views
6

我有以下代碼:IEnumerable.Select具有索引

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

其中事故是一個字符串數組。

我想要從字符串數組中的LINQ轉型意外對象的數組如下:

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

如何從事故陣列使用LINQ檢索索引我或我必須去老套?

+2

你想從'事故'數組本身的索引,或從原來的'文本'枚舉索引?如果前者,那麼Marcin的答案是好的。如果是後者,那麼你需要在引入索引的初始'Select()'之後執行'Skip()'和'Take()'。 – 2014-12-04 02:12:49

回答

13

我不確定你要找什麼樣的索引,但如果它只是一組連續的數字,那麼你很幸運。有Select重載正是這麼做的:

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

據預計,需要兩個參數的委託 - 項目和它的索引。

+0

只需要一組連續的數字就可以了,謝謝。 – 2014-12-04 15:57:28

1

使用Enumerable.Range生成的ID值,然後使用當前值索引到您的字符串數組:

Enumerable.Range(0, accidents.Length).Select(f => new Accident() { Id = f, Name = accidents[f] }) 
0

可能是這個LINQ查詢將幫助你找到索引的格式化名稱:

var accidents=(from acc in accidents 
    select new { 
     id=accidents.IndexOf(acc), 
     Name = acc.Replace("\"", string.Empty) 
    }).ToArray() 

,或者您也可以,如果你想產生是在IEnumerable的格式使用.ToList()的情況。