Linq获取索引

本文关键字:索引 获取 Linq | 更新日期: 2023-09-27 18:06:44

在我的应用程序中,我使用下面的代码来获取所需内容的索引(行号)(我在基于跳过/获取索引和搜索文本的情况下多次使用此代码)。我使用Skip和Take取决于我是否必须在某些行或某些行之后搜索数据。在这两种情况下,我使用First()而不是FirstOrDefault()作为我正在搜索的文本将始终存在。

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; }        
    }

到现在还没有给我任何问题。但是对于这种手术,这是正确的方法吗?有没有更好的办法?

谢谢

Linq获取索引

清理代码:

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会很奇怪。如果这是一种常见的操作,您可能应该将这些行存储在某种支持快速随机访问的数据结构中。