O loop foreach
em C# é uma maneira conveniente de iterar sobre coleções, mas não fornece intrinsecamente o índice da iteração atual. Isso pode ser inconveniente quando você precisa do elemento e de seu índice. Este artigo explora dois métodos eficazes para recuperar o índice dentro de uma iteração do tipo foreach
.
Sumário
Usando o método Select()
do LINQ
O método Select()
do LINQ oferece uma maneira concisa de obter o elemento e seu índice. Ele transforma a coleção original em uma nova sequência onde cada elemento é emparelhado com seu índice.
using System;
using System.Collections.Generic;
using System.Linq;
public class ForeachIndexExample
{
public static void Main(string[] args)
{
List<string> names = new List<string>() { "Alice", "Bob", "Charlie", "David" };
// Use Select() to get index and element
var indexedNames = names.Select((name, index) => new { Name = name, Index = index });
// Iterate through the indexed sequence
foreach (var item in indexedNames)
{
Console.WriteLine($"Name: {item.Name}, Index: {item.Index}");
}
}
}
Este código cria um novo tipo anônimo contendo o nome e seu índice. O loop foreach
então itera por essa nova sequência, fornecendo acesso a ambas as informações. Essa abordagem é legível e funciona bem para coleções de qualquer tamanho.
Usando um loop for
padrão
Para melhor desempenho, especialmente com coleções grandes, um loop for
padrão oferece uma abordagem mais direta. Isso evita a sobrecarga de criar uma nova sequência.
using System;
using System.Collections.Generic;
public class ForeachIndexExample
{
public static void Main(string[] args)
{
List<string> names = new List<string>() { "Alice", "Bob", "Charlie", "David" };
// Use a for loop with index
for (int index = 0; index < names.Count; index++)
{
string name = names[index];
Console.WriteLine($"Name: {name}, Index: {index}");
}
}
}
Este método acessa diretamente os elementos usando seus índices. Embora não use um loop foreach
, ele fornece uma solução mais eficiente para grandes conjuntos de dados.
A escolha entre esses métodos depende de suas prioridades. O método Select()
oferece legibilidade, enquanto o loop for
oferece melhor desempenho para coleções maiores. Considere o tamanho de seus dados e a importância da legibilidade ao fazer sua seleção.