.NET-HILFE

C# Find (Wie es für Entwickler funktioniert)

Veröffentlicht 13. Juni 2023
Teilen Sie:

Willkommen zu unserem Tutorial über die praktische Funktion Find in C#. Sie sind soeben über eine leistungsstarke Funktion gestolpert, die Ihren Codierungsprozess rationalisieren kann. Egal, ob Sie ein erfahrener Programmierer sind oder gerade erst anfangen, dieses Tutorial wird Sie durch alle Elemente führen, damit Sie loslegen können.

Die Grundlagen der Suche

Im Kern ist Find eine Funktion, die es Ihnen ermöglicht, das erste Element in einer Sammlung, einem Array oder einer Liste zu finden, das ein bestimmtes Prädikat erfüllt. Was ist ein Prädikat, fragen Sie? In der Programmierung ist ein Prädikat eine Funktion, die bestimmte Bedingungen prüft, die für Elemente in einer Sammlung definiert sind.

Lassen Sie uns nun in ein Beispiel für eine öffentliche Klasse eintauchen.


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#

In diesem Code ist BikePart unsere öffentliche Klasse, und sie enthält eine öffentliche String-ID, um jedes Fahrradteil zu identifizieren. Wir haben die Methode "ToString" überschrieben, um die ID des Fahrradteils zu drucken, und wir haben auch die Methoden "Equals" und "GetHashCode" für Vergleichszwecke überschrieben.

Verwendung von Find mit Prädikaten

Jetzt, wo wir unsere Klasse BikePart haben, können wir eine Liste von Fahrradteilen erstellen und verwenden finden um bestimmte Teile anhand ihrer IDs zu finden. Betrachten wir das folgende Beispiel:


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#

In diesem Code werden vier BikePart'-Objekte mit eindeutigen IDs instanziiert. Als nächstes erstellen wir ein PrädikatfindChainRingPredicate, das überprüft, ob ein Fahrradteil die ID "Chain Ring ID" hat. Zum Schluss rufen wirFind` auf unserer Liste von Fahrradteilen auf, indem wir das Prädikat verwenden, das wir definiert haben, und geben die ID des gefundenen Teils auf der Konsole aus.

Verstehen des Prädikatsparameters

Sie wundern sich vielleicht über den Parameter Prädikat übereinstimmen in unserer Methode "Finden". Hier legen Sie die Bedingungen fest, unter denen die Methode Find ein Element zurückgibt. In unserem Fall sollte die Methode "Find" das erste Element zurückgeben, das mit der "Kettenring-ID" übereinstimmt.

Wenn kein Element die in Ihrem Prädikat definierten Bedingungen erfüllt, gibt die Methode Find einen Standardwert zurück. Wenn Sie zum Beispiel mit einem Array von Ganzzahlen arbeiten und Ihr Prädikat keine Übereinstimmung findet, gibt die Methode Find '0' zurück, den Standardwert für Ganzzahlen in C#.

Das Prinzip der linearen Suche

Es ist wichtig zu wissen, dass die Funktion Find eine lineare Suche über das gesamte Array, die Liste oder die Sammlung durchführt. Das bedeutet, dass sie beim ersten Element beginnt und jedes folgende Element der Reihe nach untersucht, bis sie das erste Vorkommen eines Elements findet, das das Prädikat erfüllt.

In manchen Fällen möchten Sie vielleicht das letzte Element finden, das das Prädikat erfüllt, und nicht das erste. Zu diesem Zweck bietet C# die Funktion FindLast.

findIndex" und "FindLastIndex

Genauso wie Find Ihnen hilft, das erste Vorkommen eines Elements zu finden, das Ihrem angegebenen Prädikat entspricht, bietet C# auch die Methoden FindIndex und FindLastIndex, um Ihnen die Indizes des ersten bzw. letzten Elements zu liefern, das Ihren Bedingungen entspricht.

Nehmen wir ein Beispiel:


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#

Die Macht von FindAll

Die Methode "FindAll" ruft, wie der Name schon sagt, alle Elemente in der Sammlung ab, die das Prädikat erfüllen. Sie wird verwendet, wenn Sie Elemente auf der Grundlage bestimmter Bedingungen filtern müssen. Die Methode FindAll gibt eine neue Liste mit allen übereinstimmenden Elementen zurück.

Hier ein Beispiel für einen Code:


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 ins Spiel bringen

Ein wichtiger Bereich, in dem unsere C#-Kenntnisse genutzt werden können, ist die Bearbeitung von PDF-Inhalten mit IronPDF, einem leistungsstarken C#

Angenommen, wir arbeiten mit einem PDF-Dokument, das Informationen über verschiedene Fahrradteile enthält. Oft müssen wir bestimmte Teile innerhalb dieses Inhalts finden. Hier bieten IronPDF und die C# Find-Methode eine leistungsstarke Lösung.

Zunächst würden wir IronPDF zu den Text aus unserer PDF-Datei extrahierenund dann können wir die Methode Find oder FindAll verwenden, die wir bereits kennengelernt haben, um den spezifischen Teil im extrahierten Text zu finden.


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#

In diesem Code haben wir eine PDF-Datei geladen, den Text extrahiert, ihn in Zeilen aufgeteilt und dann FindAll verwendet, um alle Zeilen zu finden, in denen 'Chain Ring ID' erwähnt wird.

Wie man PDF-Dateien in VB.NET anzeigt: Abbildung 1

Dies ist ein einfaches Beispiel dafür, wie die Methode Find zusammen mit IronPDF in einem praktischen Szenario verwendet werden kann. Es demonstriert den Nutzen und die Vielseitigkeit von C# zusammen mit seinen leistungsstarken Bibliotheken, die Ihre Programmieraufgaben einfacher und effizienter machen.

Schlussfolgerung

In diesem Tutorial haben wir die C#-Methode Find** und ihre Verwandten, FindIndex, FindLastIndex und FindAll, genauer unter die Lupe genommen. Wir haben ihre Einsatzmöglichkeiten erforscht, einige Codebeispiele untersucht und herausgefunden, unter welchen Umständen sie am effektivsten sind.

Außerdem haben wir uns mit der IronPDF-Bibliothek in die Welt der PDF-Manipulation gewagt. Ebenso sahen wir eine praktische Anwendung unserer Kenntnisse der "Find"-Methode bei der Extraktion und Suche von Inhalten in einem PDF-Dokument.

IronPDF bietet eine kostenlose versuchund bietet damit eine hervorragende Gelegenheit, seine Funktionalitäten zu erkunden und festzustellen, wie es Ihre C#-Projekte unterstützen kann. Wenn Sie sich entscheiden, IronPDF nach der Testphase weiter zu nutzen, beginnen die Lizenzen bei $749.

< PREVIOUS
C# Typen (Wie es für Entwickler funktioniert)
NÄCHSTES >
C# Neu (Wie es für Entwickler funktioniert)

Sind Sie bereit, loszulegen? Version: 2024.10 gerade veröffentlicht

Gratis NuGet-Download Downloads insgesamt: 11,308,499 Lizenzen anzeigen >