Как я могу использовать linq для перехода от массива индексов к коллекции объектов? - PullRequest
2 голосов
/ 18 сентября 2011

Мой заглавный вопрос немного расплывчатый, поскольку его трудно задать, но моя ситуация такова:

У меня есть массив целых, которые являются индексами в отдельном наборе объектов.

Массив выглядит так:

int[] indices = { 0, 2, 4, 9, 10, 11, 13, /* more (non-)sequential indices */ };

Каждый из этих индексов соответствует объекту с этим индексом в коллекции, которую я имею.

Я хочу иметь возможность создавать новую коллекцию этих объектов, используя индексы в моем массиве.

Как бы я это сделал, используя некоторые функции LINQ?

Ответы [ 2 ]

5 голосов
/ 18 сентября 2011
int[] indices = { 0, 2, 4, 9, 10, 11, 13 };
string[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q" };

IEnumerable<string> results = indices.Select(s => strings[s]);

// or List<string> results = indices.Select(s => strings[s]).ToList();

foreach (string result in results) // display results
{
    Console.WriteLine(result);
}

Конечно, измените строки и т. Д. В вашей коллекции объектов.

4 голосов
/ 18 сентября 2011

Примерно так должно работать:

List<int> items = Enumerable.Range(1,100).ToList();
int[] indices = { 0, 2, 4, 9, 10, 11, 13, /* more (non-)sequential indices */ };
var selectedItems = indices.Select( x => items[x]).ToList();

В основном для каждого индекса в вашей коллекции индексов, который вы проецируете на соответствующий элемент в вашей коллекции items (какого бы типа эти элементы ни были) с помощью индексатора.

Если ваша целевая коллекция - IEnumerable<SomeType>, вы можете вместо нее использовать ElementAt() вместо индексатора:

var selectedItems = indices.Select(x => items.ElementAt(x)).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...