AYUDA .NET

C# Find (Cómo funciona para desarrolladores)

Actualizado 13 de junio, 2023
Compartir:

Bienvenido a nuestro tutorial sobre la práctica función Find de C#. Acaba de toparse con una potente función que puede agilizar su proceso de codificación. Tanto si eres un programador experimentado como si acabas de empezar, este tutorial te guiará a través de todos los elementos necesarios para ponerte en marcha.

Fundamentos de Find

En esencia, Find es una función que permite localizar el primer elemento de una colección, matriz o lista que satisface un predicado especificado. ¿Qué es un predicado? En programación, un predicado es una función que comprueba determinadas condiciones definidas para los elementos de una colección.

Ahora, vamos a sumergirnos en un ejemplo de clase pública.


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#

En este código, BikePart es nuestra clase pública, y contiene una cadena pública ID para identificar cada pieza de bicicleta. Hemos sobreescrito el método ToString para imprimir el ID de la parte de la moto, y también hemos sobreescrito los métodos Equals y GetHashCode para propósitos de comparación.

Utilización de la función Buscar con predicados

Ahora que tenemos nuestra clase BikePart, podemos crear una lista de piezas de bicicleta y utilizar Buscar para localizar piezas específicas basándose en sus ID. Veamos el siguiente ejemplo:


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#

En este código, instanciamos cuatro objetos BikePart con IDs únicos. A continuación, creamos un predicado findChainRingPredicate que comprueba si una pieza de bicicleta tiene el ID "Chain Ring ID". Por último, llamamos a Find en nuestra lista de piezas de bicicleta utilizando el predicado que hemos definido e imprimimos el ID de la pieza encontrada en la consola.

Entender el parámetro predicado

Puede que te estés preguntando por el parámetro Predicate match de nuestro método Find. Aquí se definen las condiciones bajo las cuales el método Find devuelve un elemento. En nuestro caso, queríamos que el método Find devolviera el primer elemento que coincidiera con el "Chain Ring ID".

Si ningún elemento satisface las condiciones definidas en su predicado, el método Find devolverá un valor por defecto. Por ejemplo, si estás trabajando con un array de enteros y tu predicado no encuentra ninguna coincidencia, el método Find devolverá 0, el valor por defecto para los enteros en C#.

Principio de búsqueda lineal

Es esencial tener en cuenta que la función Find realiza una búsqueda lineal en toda la matriz, lista o colección. Esto significa que comienza en el primer elemento e inspecciona cada elemento siguiente en secuencia hasta que localiza la primera aparición de un elemento que satisface el predicado.

En algunos casos, es posible que desee localizar el último elemento que satisface el predicado en lugar del primero. Para ello, C# ofrece la función FindLast.

FindIndex y FindLastIndex.

Del mismo modo que Find le ayuda a localizar la primera aparición de un elemento que coincida con el predicado especificado, C# también proporciona los métodos FindIndex y FindLastIndex para proporcionarle los índices del primer y el último elemento que coincidan con sus condiciones, respectivamente.

Pongamos un ejemplo:


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" }, //  Añadido un segundo anillo de cadena
    };

    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" }, //  Añadido un segundo anillo de cadena
    };

    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#

El poder de `FindAll

El método FindAll, como su nombre indica, recupera todos los elementos de la colección que satisfacen el predicado. Se utiliza cuando es necesario filtrar elementos en función de determinadas condiciones. El método FindAll devuelve una nueva Lista con todos los elementos coincidentes.

He aquí un ejemplo de código:


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" }, //  Añadido un segundo anillo de cadena
    };

    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" }, //  Añadido un segundo anillo de cadena
    };

    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 entra en escena

Un área crucial en la que se pueden utilizar nuestros conocimientos de C# Find es la manipulación de contenidos PDF mediante IronPDF, un potente C#

Supongamos que estamos trabajando con un documento PDF que contiene información sobre varias piezas de bicicleta. A menudo, necesitamos localizar partes específicas dentro de este contenido. Aquí es donde IronPDF y el método C# Find se combinan para proporcionar una potente solución.

En primer lugar, utilizaríamos IronPDF a extraer el texto de nuestro PDF y, a continuación, podemos utilizar el método Find o FindAll que hemos aprendido antes para localizar la parte específica en el texto extraído.


using IronPdf;

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

//  Suponiendo que el texto de nuestro PDF esté dividido en líneas
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();

//  Suponiendo que el texto de nuestro PDF esté dividido en líneas
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()

'  Suponiendo que el texto de nuestro PDF esté dividido en líneas
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#

En este código, hemos cargado un PDF, extraído el texto, dividido en líneas y utilizado FindAll para localizar todas las líneas que mencionan "Chain Ring ID".

Cómo ver archivos PDF en VB.NET: Figura 1

Este es un ejemplo básico de cómo se puede utilizar el método Find junto con IronPDF en un escenario práctico. Demuestra la utilidad y versatilidad de C# junto con sus potentes bibliotecas que ayudan a que sus tareas de programación sean más fáciles y eficientes.

Conclusión

En este tutorial, profundizamos en el método Find** de C# y sus parientes, FindIndex, FindLastIndex y FindAll. Exploramos sus usos, analizamos algunos ejemplos de código y descubrimos las circunstancias en las que son más eficaces.

También nos aventuramos en el mundo de la manipulación de PDF utilizando la biblioteca IronPDF. Asimismo, vimos una aplicación práctica de nuestros conocimientos sobre el método Find en la extracción y búsqueda de contenidos dentro de un documento PDF.

IronPDF ofrece un ensayo que ofrece una excelente oportunidad para explorar sus funcionalidades y determinar cómo puede beneficiar a sus proyectos de C#. Si decide seguir utilizando IronPDF después de la versión de prueba, las licencias comienzan a partir de $749.

< ANTERIOR
Tipos de C# (Cómo funciona para los desarrolladores)
SIGUIENTE >
C# Nuevo (Cómo funciona para los desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123