2011-08-24 75 views
0

在我的應用程序中,我使用下面的代碼來獲取所需內容的索引(行號)(我基於skip/take索引和搜索文本多次使用該索引)。我正在使用「跳過」和「取消」,具體取決於是否必須在某些行後面搜索數據或者在某些行中使用行。在這兩種情況下,我使用First()而不是FirstOrDefault()作爲我正在搜索的文本將始終存在。Linq獲取索引

Int myIndex = pSegments.Skip(nextIndex).Where(seg => (seg.Elements.ElementAt(0).Equals("MyTEXT")).Select(seg => seg.LineNumber).First(); 

Int myIndex = prodSegments.Take(testIndex).Where(seg => (seg.SegID.Equals("SOMETEXT") && seg.Elements.ElementAt(1).Equals(「SampleText」))).Select(seg => seg.LineNumber).First(); 

哪裏pSegments是 -

IEnumerable<PSegment> pSegments; 

    class PSegment 
    { 
     public string SegID { get; set; } 
     public string[] Elements { get; set; }   
     public int LineNumber { get; set; }   
    } 

它並沒有給我任何問題至今。但這是採取這種手術的正確方法嗎?有什麼更好的嗎?

感謝

回答

1

清理你的代碼:

int myIndex = pSegments.Skip(nextIndex) 
    .First(seg => seg.Elements[0] == "MyTEXT") 
    .LineNumber; 

int myIndex = prodSegments.Take(testIndex) 
    .First(seg => seg.SegID == "SOMETEXT" && seg.Elements[1] == "SampleText") 
    .LineNumber; 

這是很難回答你的主要問題,因爲你沒有提供很多方面的,我發現你的措辭混亂。但一般來說,使用這樣的SkipTake會很奇怪。如果這是一種常見操作,您應該將行存儲在支持快速隨機訪問的某種數據結構中。

+0

我有我加載到pSegments中的文本文件,其中每個pSegemnt是文本文件中的一行。另一個文本文件我將加載到另一組段中。現在循環通過一組段,我從另一組段中搜索數據。在搜索時,我使用了Skip/Take,這樣我就不用搜索所有的段 – San