AIDE .NET

C# Find (Comment ça marche pour les développeurs)

Publié juin 13, 2023
Partager:

Bienvenue dans notre tutoriel sur la fonction Find de C#. Vous venez de découvrir une fonctionnalité puissante qui peut rationaliser votre processus de codage. Que vous soyez un codeur chevronné ou que vous débutiez, ce didacticiel vous présentera tous les éléments nécessaires à la réalisation de votre projet.

Les bases de la recherche

A la base, Find est une fonction qui vous permet de localiser le premier élément d'une collection, d'un tableau ou d'une liste qui satisfait un prédicat spécifié. Qu'est-ce qu'un prédicat ? En programmation, un prédicat est une fonction qui teste certaines conditions définies pour les éléments d'une collection.

Voyons maintenant un exemple de classe publique.


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#

Dans ce code, BikePart est notre classe publique, et elle contient une chaîne publique ID pour identifier chaque pièce de vélo. Nous avons surchargé la méthode ToString pour imprimer joliment l'ID de la pièce de vélo, et nous avons également surchargé les méthodes Equals et GetHashCode à des fins de comparaison.

Utilisation de Find avec des prédicats

Maintenant que nous avons notre classe BikePart, nous pouvons créer une liste de pièces de vélo et utiliserTrouver pour localiser des pièces spécifiques sur la base de leurs identifiants. Prenons l'exemple suivant :


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#

Dans ce code, nous instançons quatre objets BikePart avec des ID uniques. Ensuite, nous créons un prédicat findChainRingPredicate qui vérifie si une pièce de vélo a l'ID "Chain Ring ID". Enfin, nous appelons Find sur notre liste de pièces de vélo en utilisant le prédicat que nous avons défini et nous imprimons l'ID de la pièce trouvée sur la console.

Comprendre le paramètre prédicat

Vous vous interrogez peut-être sur le paramètre Predicate match de notre méthode Find. C'est ici que vous définissez les conditions dans lesquelles la méthode Find renvoie un élément. Dans notre cas, nous voulions que la méthode Find renvoie le premier élément qui corresponde au "Chain Ring ID".

Si aucun élément ne remplit les conditions définies dans votre prédicat, la méthode Find retournera une valeur par défaut. Par exemple, si vous travaillez avec un tableau d'entiers et que votre prédicat ne trouve pas de correspondance, la méthode Find renverra '0', la valeur par défaut des entiers en C#.

Le principe de la recherche linéaire

Il est essentiel de noter que la fonction Find effectue une recherche linéaire sur l'ensemble du tableau, de la liste ou de la collection. Cela signifie qu'il commence par le premier élément et inspecte chaque élément suivant dans l'ordre jusqu'à ce qu'il trouve la première occurrence d'un élément satisfaisant le prédicat.

Dans certains cas, vous pouvez vouloir localiser le dernier élément qui satisfait le prédicat au lieu du premier. À cette fin, C# fournit la fonction FindLast.

FindIndex et FindLastIndex

Tout comme Find vous aide à localiser la première occurrence d'un élément qui correspond à votre prédicat spécifié, C# fournit également les méthodes FindIndex et FindLastIndex pour vous donner les indices du premier et du dernier élément qui correspondent à vos conditions, respectivement.

Prenons un exemple :


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#

La puissance de FindAll (Rechercher tout)

La méthode FindAll, comme son nom l'indique, récupère tous les éléments de la collection qui satisfont le prédicat. Il est utilisé lorsque vous devez filtrer des éléments en fonction de certaines conditions. La méthode FindAll renvoie une nouvelle liste avec tous les éléments correspondants.

Voici un exemple de 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#

L'intégration d'IronPDF dans le tableau

Un domaine crucial dans lequel nos connaissances en C# Find peuvent être utilisées est la manipulation de contenu PDF à l'aide d'IronPDF, une puissante bibliothèque C# pour le traitement des PDF.

Supposons que nous travaillions avec un document PDF contenant des informations sur diverses pièces de vélo. Souvent, nous avons besoin de localiser des parties spécifiques de ce contenu. C'est là qu'IronPDF et la méthode C# Find se combinent pour fournir une solution puissante.

Tout d'abord, nous utiliseronsIronPDF àextraire le texte de notre PDF nous pouvons ensuite utiliser la méthode Find ou FindAll que nous avons apprise plus tôt pour localiser la partie spécifique dans le texte extrait.


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#

Dans ce code, nous avons chargé un PDF, extrait le texte, l'avons divisé en lignes, puis avons utilisé FindAll pour localiser toutes les lignes mentionnant 'Chain Ring ID'.

Comment visualiser des fichiers PDF en VB.NET : Figure 1

Ceci est un exemple basique de la façon dont la méthode Find peut être utilisée avec IronPDF dans un scénario pratique. Il démontre l'utilité et la polyvalence de C# ainsi que ses puissantes bibliothèques qui facilitent vos tâches de programmation et les rendent plus efficaces.

Conclusion

Dans ce tutoriel, nous avons approfondi la méthode C# Find et ses apparentés, FindIndex, FindLastIndex et FindAll. Nous avons étudié leurs utilisations, exploré quelques exemples de code et découvert les circonstances dans lesquelles ils sont les plus efficaces.

Nous nous sommes également aventurés dans le monde de la manipulation des PDF en utilisant la bibliothèque IronPDF. De même, nous avons vu une application pratique de notre connaissance de la méthode Find dans l'extraction et la recherche de contenu dans un document PDF.

IronPDF offre un service gratuit deessai d'IronPDFle logiciel de gestion de l'information est une excellente occasion d'explorer ses fonctionnalités et de déterminer les avantages qu'il peut apporter à vos projets C#. Si vous décidez de continuer à utiliser IronPDF après la période d'essai, les licences commencent à partir de $749.

< PRÉCÉDENT
Types C# (Comment ça marche pour les développeurs)
SUIVANT >
C# Nouveau (Comment ça marche pour les développeurs)