Получить вторую последнюю строку таблицы

Если получение первой/последней строки выглядит следующим образом:

TableRow lastRow = theTable.Elements<tablerow>().Last();

TableRow firstRow = theTable.Elements<tablerow>().First();
</tablerow></tablerow>

Как выбрать вторую последнюю строку?

4 ответа

Попробуй это:

TableRow firstRow = theTable.Elements<tablerow>().Reverse().Skip(1).First();
</tablerow>

Обратите внимание, что это выражение может генерировать исключение, если подходящая строка недоступна (также Last и First).


Если вы знаете, граф, вы можете найти k элемент -th с задней стороны вычитанием, как это:

var k = 2; // Second element from the back
var total = theTable.Elements<tablerow>().Count();
if (total < k) throw ... // Not enough elements
var kThFromBack = theTable.Elements<tablerow>().Skip(total-k).First();
</tablerow></tablerow>


Сделал небольшой метод расширения:

public static T NthLast<t>(this IEnumerable<t> source, int count)
{
 if (count < 0)
 throw new ArgumentException("count must be >= 0");

 int i = 0;
 var queue = new Queue<t>(count);

 using (var e = source.GetEnumerator())
 {
 while (e.MoveNext())
 {
 queue.Enqueue(e.Current);

 if (i++ > count)
 queue.Dequeue();
 }

 if (count >= i)
 throw new ArgumentException("count was greater than length");
 }

 return queue.Dequeue();
}
</t></t></t>

Чтобы получить второй последний элемент:

var secondLast = theTable.Elements<tablerow>().NthLast(1)
</tablerow>


Простой

TableRow lastButOneRow= theTable.Rows[theTable.Rows.Count-2]

licensed under cc by-sa 3.0 with attribution.