una - matriz 4x4 c#
¿Es posible comenzar a iterar desde un elemento que no sea el primero utilizando foreach? (5)
Es más fácil usar el método Skip
en LINQ to Objects para esto, para omitir una cantidad dada de elementos:
foreach (var value in sequence.Skip(1)) // Skips just one value
{
...
}
Obviamente, solo cambie 1 por cualquier otro valor para omitir una cantidad diferente de elementos ...
De forma similar, puede usar Take
para limitar la cantidad de elementos que se devuelven.
Puedes leer más sobre estos (y los SkipWhile
relacionados SkipWhile
y TakeWhile
) en mi serie de blog Edulinq .
Estoy pensando en implementar IEnumerable para mi colección personalizada (un árbol) para poder usar foreach para atravesar mi árbol. Sin embargo, por lo que sé foreach siempre comienza desde el primer elemento de la colección. Me gustaría elegir de qué elemento comienza foreach. ¿Es posible cambiar de alguna manera el elemento desde el que comienza foreach?
Puede usar Skip para omitir algunos elementos y hacer que comience allí.
Por ejemplo:
foreach(item in theTree.Skip(9)) // Skips the first 9 items
{
// Do something
Sin embargo, si está escribiendo un árbol, es posible que desee proporcionar un miembro en el elemento del árbol en sí que devolverá un nuevo IEnumerable<T>
que se enumerará desde allí hacia abajo. Esto, potencialmente, sería más útil a largo plazo.
Sí. Haz lo siguiente:
Collection<string> myCollection = new Collection<string>;
foreach (string curString in myCollection.Skip(3))
//Dostuff
Skip
es una función IEnumerable que omite la cantidad que especifique comenzando en el índice actual. Por otro lado, si quisiera usar solo los primeros tres, debería usar. .Take
:
foreach (string curString in myCollection.Take(3))
Incluso pueden combinarse, por lo que si solo desea los 4-6 elementos que podría hacer:
foreach (string curString in myCollection.Skip(3).Take(3))
Si desea omitir la lectura de Filas en un DataGridView
, intente esto
foreach (DataGridViewRow row in dataGridView1.Rows.Cast<DataGridViewRow().Skip(3))
Si desea copiar el contenido de un DataGridView
a otra fila de omisión, intente esto,
foreach (DataGridViewRow row in dataGridView1.Rows.Cast<DataGridViewRow>().Skip(3))
{
foreach (DataGridViewCell cell in row.Cells)
{
string value = cell.Value.ToString();
dataGridView2.Rows[i].Cells[j].Value = cell.Value.ToString();
j++;
}
i++;
j = 0;
}
esto copia el contenido de un DataGridView
a otro omitiendo 3 filas.
Foreach
sobre su colección en la forma definida por su implementación de IEnumerable
. Entonces, aunque puede omitir elementos (como se sugirió anteriormente), aún está iterando técnicamente sobre los elementos en el mismo orden.
No estoy seguro de lo que está tratando de lograr, pero su clase podría tener múltiples propiedades IEnumerable
, cada una de las cuales enumera los elementos en un orden específico.