Есть ли в C # функция linq, которая позволяет собирать IEnumerables из определенного диапазона индексов?
Примером будет
var objectArray = new string[] { "Bill", "Bob", "Joe", "Phil", "Tom", "Paul" };
var indexArray = new int[] { 1, 3, 5 };
var list = objectArray.Where(SOME_FUNCTION_TO_GET_INDEXES ??).ToList();
//output would be list:
//Bob
//Phil
//Paul
2 ответа
Просто используйте Select
с вашим indexArray
и верните элемент из objectArray
с помощью индексации.
var list = indexArray.Select(i => objectArray[i]);
Обратите внимание, что это работает очень эффективно для любой коллекции, которая позволяет индексировать (например, Array
и List<T>
). В более общем случае наличия IEnumerable
или ICollection
вы не сможете индексировать напрямую. В этом случае вам нужно будет увидеть ответ Джона. В зависимости от размеров задействованных списков и количества предметов, которые вам нужно найти, может быть стоит преобразовать ваш IEnumerable
в Array
или List
(используя ToArray
например) первый.
Если исходный источник данных уже доступен по индексу, например по списку или массиву, вы можете просто использовать indexArray.Select
, как показал Мэтт.
Если вместо этого у вас есть IEnumerable<T>
, вы можете использовать перегрузку Where
, которая предоставляет индекс и значение. Так:
var list = objectArray.Where((value, index) => indexArray.Contains(index))
.ToList();
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.