.NET 幫助

C# 查找(開發者使用方式)

發佈 2023年6月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;
    }
}
Public Class BikePart
	Public Property id() As String

	Public Overrides Function Equals(ByVal obj As Object) As Boolean
		If obj Is Nothing (Not (TypeOf obj Is BikePart)) Then
			Return False
		End If

		Return Me.id = DirectCast(obj, BikePart).id
	End Function

	Public Overrides Function GetHashCode() As Integer
		Return Me.id.GetHashCode()
	End Function

	Public Overrides Function ToString() As String
		Return "BikePart ID: " & Me.id
	End Function
End Class
VB   C#

在這段代碼中,BikePart 是我們的公共類,並且包含一個公共字串 ID 以識別每個自行車零件。 我們重寫了 ToString 方法,以更好地顯示自行車零件的 ID,並且也重寫了 EqualsGetHashCode 方法以便進行比較。

使用帶有謂詞的Find

現在我們已經擁有 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());
}
Public Shared Sub Main()
	Dim bikeParts As New List From {
		New BikePart With {.id = "Chain Ring ID"},
		New BikePart With {.id = "Crank Arm ID"},
		New BikePart With {.id = "Regular Seat ID"},
		New BikePart With {.id = "Banana Seat ID"}
	}

	Dim findChainRingPredicate As Predicate = Function(bp As BikePart)
		Return bp.id = "Chain Ring ID"
	End Function
	Dim chainRingPart As BikePart = bikeParts.Find(findChainRingPredicate)

	Console.WriteLine(chainRingPart.ToString())
End Sub
VB   C#

在這段程式碼中,我們實例化了四個具有唯一 ID 的 BikePart 對象。 接下來,我們創建一個名為 findChainRingPredicate 的斷言,用來檢查自行車零件是否具有 "Chain Ring ID" 的ID。 最後,我們使用所定義的謂詞在自行車零件清單上調用 Find,並將找到的零件 ID 輸出到控制台。

了解 Predicate 參數

您可能對我們的 Find 方法中的 Predicate match 參數感到好奇。 在這裡,您可以定義 Find 方法返回元素的條件。 在我們的例子中,我們希望 Find 方法返回與“鏈環 ID”匹配的第一個元素。

如果沒有元素符合您謂詞中定義的條件,Find 方法將返回預設值。 例如,如果您正在處理一個整數數組,而您的謂詞未找到匹配項,Find 方法將返回 '0',這是 C# 中整數的默認值。

線性搜尋原則

請注意,Find 函數會對整個數組、列表或集合進行線性搜索。 這意味著從第一個元素開始,並依序檢查每個後續元素,直到找到第一個滿足條件的元素為止。

在某些情況下,您可能希望找到滿足條件的最後一個元素,而不是第一個。 為此目的,C# 提供了 FindLast 函數。

FindIndexFindLastIndex

正如 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}");
}
Public Shared Sub Main()
	Dim bikeParts As New List From {
		New BikePart With {.id = "Chain Ring ID"},
		New BikePart With {.id = "Crank Arm ID"},
		New BikePart With {.id = "Regular Seat ID"},
		New BikePart With {.id = "Banana Seat ID"},
		New BikePart With {.id = "Chain Ring ID"}
	}

	Dim findChainRingPredicate As Predicate = Function(bp As BikePart)
		Return bp.id = "Chain Ring ID"
	End Function

	Dim firstChainRingIndex As Integer = bikeParts.FindIndex(findChainRingPredicate)
	Dim lastChainRingIndex As Integer = bikeParts.FindLastIndex(findChainRingPredicate)

	Console.WriteLine($"First Chain Ring ID found at index: {firstChainRingIndex}")
	Console.WriteLine($"Last Chain Ring ID found at index: {lastChainRingIndex}")
End Sub
VB   C#

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());
    }
}
Public Shared Sub Main()
	Dim bikeParts As New List From {
		New BikePart With {.id = "Chain Ring ID"},
		New BikePart With {.id = "Crank Arm ID"},
		New BikePart With {.id = "Regular Seat ID"},
		New BikePart With {.id = "Banana Seat ID"},
		New BikePart With {.id = "Chain Ring ID"}
	}

	Dim findChainRingPredicate As Predicate = Function(bp As BikePart)
		Return bp.id = "Chain Ring ID"
	End Function

	Dim chainRings As List = bikeParts.FindAll(findChainRingPredicate)

	Console.WriteLine($"Found {chainRings.Count} Chain Rings:")
	For Each chainRing As BikePart In chainRings
		Console.WriteLine(chainRing.ToString())
	Next chainRing
End Sub
VB   C#

將 IronPDF 帶入畫面

我們的 C# Find 知識可以用於的一個關鍵領域是使用 IronPDF 進行 PDF 內容操作,這是一個強大的 C# PDF 處理庫。

假設我們正在處理一份包含各種自行車零件資訊的 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);
}
Imports Microsoft.VisualBasic
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("C:\Users\Administrator\Desktop\bike.pdf")
Private pdfText As String = pdf.ExtractAllText()

' Assuming our PDF text is split into lines
Private pdfLines As List = pdfText.Split(ControlChars.Lf).ToList()

Private findChainRingPredicate As Predicate = Function(line As String)
	Return line.Contains("Chain Ring ID")
End Function
Private chainRingLines As List = pdfLines.FindAll(findChainRingPredicate)

Console.WriteLine($"Found {chainRingLines.Count} lines mentioning 'Chain Ring ID':")
For Each line As String In chainRingLines
	Console.WriteLine(line)
Next line
VB   C#

在此代碼中,我們載入了一個 PDF,提取了文本,將其分成行,然後使用 FindAll 來定位提到 'Chain Ring ID' 的所有行。

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

這是一個基本範例,說明如何在實際情況中將 Find 方法與 IronPDF 結合使用。 它展示了 C# 的實用性和多功能性,以及其強大的庫如何幫助使您的編程任務更輕鬆和高效。

結論

在本教程中,我們深入探討了 C# 的 Find 方法及其相關方法,FindIndexFindLastIndexFindAll。 我們探討了它們的用途,研究了一些代碼範例,並發現了它們最有效的情況。

我們還使用IronPDF庫進入了PDF操作的世界。 同樣地,我們看到了使用 Find 方法在 PDF 文件中提取和搜索內容的實際應用。

IronPDF 提供免費IronPDF 試用版,提供一個絕佳的機會來探索其功能,並確定它如何能為您的 C# 專案帶來好處。 如果您決定在試用期後繼續使用IronPDF,授權價格從$749開始。

< 上一頁
C# 類型(開發人員的工作原理)
下一個 >
C# 新手指南 (開發者使用方式)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >