2014-12-04 16 views
6

I mają następujące oznaczenia:IEnumerable.Select indeksem

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

gdzie wypadków jest tablicą łańcuchów.

Chcę dokonać transformacji Linq z tablicy ciągów do tablicy obiektów wypadków następująco:

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

Jak mogę odzyskać indeks i od tablicy wypadków przy użyciu LINQ, czy muszę iść stara szkoła?

+2

Czy chcesz, aby indeks z tablicy 'accidents' się, lub indeks z oryginalnego wyliczenia' tekst'? Jeśli ta pierwsza, odpowiedź Marcina jest w porządku. Jeśli to drugie, musisz wykonać 'Skip()' i 'Take()' _ po pierwotnym 'Select()', gdzie indeks jest wprowadzany. –

Odpowiedz

13

Nie jestem pewien jakiego rodzaju indeksu szukasz, ale jeśli to tylko zestaw kolejnych liczb, masz szczęście. Jest Select przeciążenie, że robi dokładnie to:

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

Spodziewa delegatem że przyjmuje dwa parametry - pozycja i jej indeksu.

+0

Wystarczy zestaw kolejnych liczb, dziękuję. –

1

Zastosowanie Enumerable.Range do generowania wartości ID, a następnie użyć bieżącej wartości indeksu do swojej tablicy ciągów:

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

Może być to zapytanie LINQ pomoże Ci znaleźć sformatowany nazwę z indeksem:

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

lub możesz również użyć .ToList() dla sprawy, jeśli chcesz, aby wynik był w formacie IEnumerable.

Powiązane problemy