.NET 帮助

C# 查找(开发人员如何使用)

Chipego
奇佩戈-卡琳达
2023年六月13日
分享:

欢迎阅读我们的 C# 便捷 Find 函数教程。 您刚刚发现了一个可以简化编码过程的强大功能。 因此,无论您是经验丰富的程序员还是刚刚入门,本教程都将指导您掌握所有要素,让您轻松上手。

查找的基础知识

Find "的核心功能是查找集合、数组或列表中满足指定谓词的第一个元素。 你会问什么是谓词? 在编程中,谓词是一个函数,用于测试为集合中的元素定义的某些条件。

现在,让我们深入一个公共类示例。


public class BikePart
{
    public string id { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null 
 !(obj is BikePart))
            return false;

        return this.id == ((BikePart)obj).id;
    }

    public override int GetHashCode()
    {
        return this.id.GetHashCode();
    }

    public override string ToString()
    {
        return "BikePart ID: " + this.id;
    }
}

public class BikePart
{
    public string id { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null 
 !(obj is BikePart))
            return false;

        return this.id == ((BikePart)obj).id;
    }

    public override int GetHashCode()
    {
        return this.id.GetHashCode();
    }

    public override string ToString()
    {
        return "BikePart ID: " + this.id;
    }
}

在这段代码中,"BikePart "是我们的公共类,它包含一个公共字符串 ID,用于标识每个自行车零件。 我们重载了 ToString 方法,以便很好地打印自行车零件的 ID,我们还重载了 EqualsGetHashCode 方法,以便进行比较。

使用谓词查找

现在我们有了 "BikePart "类,可以创建一个自行车零件列表,并使用查找根据 ID 定位特定部件。 让我们来看看下面的例子:


public static void Main()
{
    List bikeParts = new List
    {
        new BikePart { id = "Chain Ring ID" },
        new BikePart { id = "Crank Arm ID" },
        new BikePart { id = "Regular Seat ID" },
        new BikePart { id = "Banana Seat ID" },
    };

    Predicate findChainRingPredicate = (BikePart bp) => { return bp.id == "Chain Ring ID"; };
    BikePart chainRingPart = bikeParts.Find(findChainRingPredicate);

    Console.WriteLine(chainRingPart.ToString());
}

public static void Main()
{
    List bikeParts = new List
    {
        new BikePart { id = "Chain Ring ID" },
        new BikePart { id = "Crank Arm ID" },
        new BikePart { id = "Regular Seat ID" },
        new BikePart { id = "Banana Seat ID" },
    };

    Predicate findChainRingPredicate = (BikePart bp) => { return bp.id == "Chain Ring ID"; };
    BikePart chainRingPart = bikeParts.Find(findChainRingPredicate);

    Console.WriteLine(chainRingPart.ToString());
}

在这段代码中,我们实例化了四个具有唯一 ID 的 BikePart 对象。 接下来,我们创建一个谓词 findChainRingPredicate 来检查自行车零件是否具有 ID "链环 ID"。 最后,我们使用定义的谓词在自行车零件列表中调用 Find,并将找到的零件 ID 打印到控制台。

理解谓词参数

您可能想知道我们的 "Find "方法中的谓词匹配参数。 在此定义 Find 方法返回元素的条件。 在我们的案例中,我们希望 Find 方法返回与 "链环 ID "匹配的第一个元素。

如果没有元素满足您在谓词中定义的条件,Find 方法将返回一个默认值。 例如,如果您正在处理一个整数数组,而您的谓词没有找到匹配,"Find "方法将返回 "0",即 C# 中整数的默认值。

线性搜索原理

必须注意的是,"Find "函数在整个数组、列表或集合中进行线性搜索。 这意味着它会从第一个元素开始,依次检查后面的每个元素,直到找到满足谓词的元素的首次出现。

在某些情况下,您可能希望找到满足谓词的最后一个元素,而不是第一个元素。 为此,C# 提供了 FindLast 函数。

FindIndex "和 "FindLastIndex

正如 Find 可以帮助您找到符合指定谓词的元素的首次出现,C# 也提供了 FindIndexFindLastIndex 方法,分别为您提供符合条件的第一个和最后一个元素的索引。

让我们举个例子:


public static void Main()
{
    List bikeParts = new List
    {
        new BikePart { id = "Chain Ring ID" },
        new BikePart { id = "Crank Arm ID" },
        new BikePart { id = "Regular Seat ID" },
        new BikePart { id = "Banana Seat ID" },
        new BikePart { id = "Chain Ring ID" }, // Added a second chain ring
    };

    Predicate findChainRingPredicate = (BikePart bp) => { return bp.id == "Chain Ring ID"; };

    int firstChainRingIndex = bikeParts.FindIndex(findChainRingPredicate);
    int lastChainRingIndex = bikeParts.FindLastIndex(findChainRingPredicate);

    Console.WriteLine($"First Chain Ring ID found at index: {firstChainRingIndex}");
    Console.WriteLine($"Last Chain Ring ID found at index: {lastChainRingIndex}");
}

public static void Main()
{
    List bikeParts = new List
    {
        new BikePart { id = "Chain Ring ID" },
        new BikePart { id = "Crank Arm ID" },
        new BikePart { id = "Regular Seat ID" },
        new BikePart { id = "Banana Seat ID" },
        new BikePart { id = "Chain Ring ID" }, // Added a second chain ring
    };

    Predicate findChainRingPredicate = (BikePart bp) => { return bp.id == "Chain Ring ID"; };

    int firstChainRingIndex = bikeParts.FindIndex(findChainRingPredicate);
    int lastChainRingIndex = bikeParts.FindLastIndex(findChainRingPredicate);

    Console.WriteLine($"First Chain Ring ID found at index: {firstChainRingIndex}");
    Console.WriteLine($"Last Chain Ring ID found at index: {lastChainRingIndex}");
}

FindAll "的强大功能

FindAll "方法,顾名思义,检索集合中所有满足谓词的元素。 当您需要根据特定条件过滤元素时,就会用到它。 FindAll "方法返回一个包含所有匹配元素的新 List。

下面是一个代码示例:


public static void Main()
{
    List bikeParts = new List
    {
        new BikePart { id = "Chain Ring ID" },
        new BikePart { id = "Crank Arm ID" },
        new BikePart { id = "Regular Seat ID" },
        new BikePart { id = "Banana Seat ID" },
        new BikePart { id = "Chain Ring ID" }, // Added a second chain ring
    };

    Predicate findChainRingPredicate = (BikePart bp) => { return bp.id == "Chain Ring ID"; };

    List chainRings = bikeParts.FindAll(findChainRingPredicate);

    Console.WriteLine($"Found {chainRings.Count} Chain Rings:");
    foreach (BikePart chainRing in chainRings)
    {
        Console.WriteLine(chainRing.ToString());
    }
}

public static void Main()
{
    List bikeParts = new List
    {
        new BikePart { id = "Chain Ring ID" },
        new BikePart { id = "Crank Arm ID" },
        new BikePart { id = "Regular Seat ID" },
        new BikePart { id = "Banana Seat ID" },
        new BikePart { id = "Chain Ring ID" }, // Added a second chain ring
    };

    Predicate findChainRingPredicate = (BikePart bp) => { return bp.id == "Chain Ring ID"; };

    List chainRings = bikeParts.FindAll(findChainRingPredicate);

    Console.WriteLine($"Found {chainRings.Count} Chain Rings:");
    foreach (BikePart chainRing in chainRings)
    {
        Console.WriteLine(chainRing.ToString());
    }
}

引入 IronPDF

我们的 C# Find 知识可以利用的一个关键领域是使用 IronPDF 进行 PDF 内容操作,IronPDF 是一个功能强大的用于 PDF 处理的 C# 库。

假设我们正在处理一份包含各种自行车零件信息的 PDF 文档。 通常,我们需要在这些内容中找到特定部分。 这就是 IronPdf 和 C# Find 方法结合提供强大解决方案的地方。

首先,我们将使用IronPDF从我们的 PDF 中提取文本然后,我们可以使用前面学习过的 FindFindAll 方法在提取的文本中找到特定部分。


using IronPdf;

PdfDocument pdf = PdfDocument.FromFile(@"C:\Users\Administrator\Desktop\bike.pdf");
string pdfText = pdf.ExtractAllText();

// Assuming our PDF text is split into lines
List pdfLines = pdfText.Split('\n').ToList();

Predicate findChainRingPredicate = (string line) => { return line.Contains("Chain Ring ID"); };
List chainRingLines = pdfLines.FindAll(findChainRingPredicate);

Console.WriteLine($"Found {chainRingLines.Count} lines mentioning 'Chain Ring ID':");
foreach (string line in chainRingLines)
{
    Console.WriteLine(line);
}

using IronPdf;

PdfDocument pdf = PdfDocument.FromFile(@"C:\Users\Administrator\Desktop\bike.pdf");
string pdfText = pdf.ExtractAllText();

// Assuming our PDF text is split into lines
List pdfLines = pdfText.Split('\n').ToList();

Predicate findChainRingPredicate = (string line) => { return line.Contains("Chain Ring ID"); };
List chainRingLines = pdfLines.FindAll(findChainRingPredicate);

Console.WriteLine($"Found {chainRingLines.Count} lines mentioning 'Chain Ring ID':");
foreach (string line in chainRingLines)
{
    Console.WriteLine(line);
}

在这段代码中,我们加载了 PDF,提取了文本,将其分成几行,然后使用 "FindAll "查找所有提到 "Chain Ring ID "的行。

如何在 VB.NET 中查看 PDF 文件:图 1

这是一个在实际场景中如何将 Find 方法与 IronPDF 结合使用的基本示例。 它展示了 C# 及其强大库的实用性和多功能性,有助于使您的编程任务更轻松、更高效。

结论

在本教程中,我们深入研究了 C# Find方法及其近似方法 FindIndexFindLastIndexFindAll。 我们探讨了这些工具的用途,探究了一些代码示例,并揭示了它们在哪些情况下最为有效。

我们还使用 IronPDF 库涉足 PDF 操作领域。 同样,在提取和搜索 PDF 文档中的内容时,我们看到了 "Find "方法知识的实际应用。

IronPDF 提供免费的试用 IronPDF此外,《C# .NET》还提供了一个绝佳的机会来探索其功能,并确定如何使您的 C# 项目受益。 如果您决定在试用后继续使用 IronPdf,许可证从 $749 起。

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
C# 类型(如何为开发人员工作)
下一步 >
C# 新手指南(开发人员如何使用)