Получить все элементы, кроме первого, из массива


130

Есть ли однострочное простое выражение linq, чтобы просто получить все из простого массива, кроме первого элемента?

for (int i = 1; i <= contents.Length - 1; i++)
    Message += contents[i];

Я просто хотел посмотреть, легче ли было конденсироваться.

Ответы:


244

Да, Enumerable.Skip делает то, что вы хотите:

contents.Skip(1)

Однако результатом будет IEnumerable <T>, если вы хотите использовать массив:

contents.Skip(1).ToArray()

Также можно обернуть contentsмассив в новый экземпляр ArraySegment<>структуры. В то время над ответом было написано, что не было особенно полезным, но с .NET 4.5 с ArraySegment<>инвентарем IList<>, IReadOnlyList<>и их базовых интерфейсов ( в том числе IEnumerable<>), так что вы можете, например , передать ArraySegment<>в string.Join.
Jeppe Stig Nielsen

Как бы я ни ненавидел Linq, я решил, что могу терпеть это только потому, что он запускается в статическом конструкторе один раз при загрузке приложения, поэтому накладные расходы на производительность отсутствуют.
Krythic

7

Следующее будет эквивалентно вашему forциклу:

foreach (var item in contents.Skip(1))
    Message += item;

1
ты хотел var item??
Joe
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.