c# - que - LINQ: seleccionando el segundo elemento en IEnumerable
linq difference first firstordefault (5)
Bueno, Take(1)
no es estrictamente necesario si solo vas a First()
, así que podría ir con
pkgratio.Skip(1).First();
Sin embargo, First()
arrojará una excepción si no hay ningún valor, por lo que es posible que desee probar FirstOrDefault()
y luego comprobar si no tiene valor.
yo tengo
string[] pkgratio= "1:2:6".Split('':'');
var items = pkgratio.OrderByDescending(x => x);
Quiero seleccionar el valor medio y he propuesto esto. ¿Es esta una forma correcta de seleccionar el segundo valor en un IEnumberable?
pkgratio.Skip(1).Take(1).First();
Mientras que lo que tienes funciona, la forma más directa sería usar el índice de la matriz y hacer referencia al segundo elemento (en el índice 1 ya que el índice comienza en cero para el primer elemento): pkgratio[1]
Console.WriteLine(pkgratio[1]);
Un ejemplo más completo:
string[] pkgratio = "1:2:6".Split('':'');
for (int i = 0; i < pkgratio.Length; i++)
Console.WriteLine(pkgratio[i]);
Con un IEnumerable<T>
lo que tiene funciona, o puede obtener directamente el elemento utilizando el método ElementAt
:
// same idea, zero index applies here too
var elem = result.ElementAt(1);
Aquí está su muestra como IEnumerable<string>
. Tenga en cuenta que la llamada AsEnumerable()
es para enfatizar que la muestra funciona en contra de una IEnumerable<string>
. En realidad, puedes usar ElementAt
contra el resultado del array string[]
de Split
, pero es más eficiente usar el indexador mostrado anteriormente.
var pkgratio = "1:2:6".Split('':'').AsEnumerable();
Console.WriteLine(pkgratio.ElementAt(1));
No creo que sea necesario. .Take(1)
.
pkgratio.Skip(1).First()
Pero en este caso tienes una matriz, por lo que puedes obtener el segundo elemento muy felizmente usando:
pkgratio[1]
pkgratio.ElementAt(1);
para su escenario.
Sin embargo, su método solo es aplicable si estaba usando algunos datos que implementaron IQueryable
o si necesitaba tomar un rango de elementos comenzando en un índice específico, por ejemplo:
pkgratio.Skip(5).Take(10);