我有一個看似簡單而令人尷尬的難題。我只想要IEnumberable中的下一個元素,而不使用Skip(1).Take(1).Single()。這個例子說明了基本問題。IEnumerable的替代方案<T>.Skip(1).Take(1).Single()
private char _nextChar;
private IEnumerable<char> getAlphabet()
{
yield return 'A';
yield return 'B';
yield return 'C';
}
public void sortAlphabet()
{
foreach (char alpha in getAlphabet())
{
switch (alpha)
{
case 'A': //When A pops up, I want to get the next element, ie 'B'
_nextChar = getAlphabet().Skip(1).Take(1).Single();
break;
case 'B': //When B pops up, I want 'C' etc
_nextChar = getAlphabet().Skip(1).Take(1).Single();
break;
}
}
}
除了醜陋,這個例子的作品。但是讓我們假設IEnumerable包含200萬個元素,那麼LINQ語句會使程序的執行速度變得難以忍受。我想要的很簡單。我只想要IEnumberable中的下一個元素> <>。
_nextChar = getAlphabet().moveNext() //or getNext()
如果解決方案保持相同的結構/設計/例子的功能但是它更喜歡,我很靈活:如果有類似的功能我所有的問題將得到解決。我的程序是一個文件解析器,在200萬行文本中有一些鍵爲「money = 324」,其中「money」和「324」是IEnumberable中的相鄰元素,當解析器遇到「money」時, 324" 。 (誰不?。d對不起,壞的雙關語)
這聽起來像是FSM的情況。 – Necros 2010-08-28 15:39:48
此代碼將始終檢索序列的第二個元素,即'B',我不認爲這就是你想要的... – 2010-08-28 15:47:22
topvoted答案已經回答了你的問題。但是,爲了將來的參考,而不是'.Take(1).Single()',你可以使用'.First()'做同樣的事情。 – Timwi 2010-08-28 15:55:53