2010-03-11 5 views
9

Как получить все элементы после первого, не начиная с "-", используя linq?Попытка получить все элементы после первого совпадения с использованием linq

var arr = new[] {"-s1", "-s2", "va", "-s3", "va2", "va3"}; 
var allElementsAfterVA = from a in arr where ???? select a; 

Я хочу allElementsAfterVA быть "-s3", "va2", "va3"

+0

Почему вы хотите использовать linq здесь? Он не знает и не заботится о том, в каком порядке находятся ваши элементы, если это простой строковый массив. –

+0

Вы имеете в виду первый, НЕ начинающийся с "-"? –

+0

@MatteS: Хорошо. Теперь ваш вопрос имеет смысл :) –

ответ

16

Чтобы найти все аргументы после того, как первый, который не начинается с «-», вы можете сделать:

var elementsAfterFirstNonDash = arr.SkipWhile(i => i[0] != '-').Skip(1); 

Это находит «ва », а затем пропускает его через Skip (1). Остальные аргументы будут возвращены.

+1

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

+0

Он по-прежнему кажется конкретным решением для тестовых данных. Может быть, нечто более общее. Или возникает вопрос о том, как создать общее решение? –

+0

Да, решение похоже только для этого теста. В качестве примера я хочу получить все элементы после первого * не * начиная с «-» ... – MatteS

0

Не могли бы вы быть более ясными? Если я правильно понял, первым, начинающимся с «-», является «-s1», поэтому после этого элементы будут «-s2», «va», «-s3», «va2», «va3» и не «-s3», «va2», «va3»

+0

Извините, я пропустил * не * там ... Я хотел сказать «после того, как первый не начал с« - »« .. – MatteS

0

Я не совсем понял вопрос из вашего текста, но, глядя на пример: вы посмотрели на SkipWhile()? Кажется, это связано/полезно?

0
arr.Where((n, i) => i > 0 && n.StartsWith("-")) 

дает

-s2 -s3 

Это то, что вы имели в виду?

Смежные вопросы