Вы можете использовать отрицательные смещения в head
(или tail
), поэтому head(x, -1)
удаляет последний последний элемент :
R> head( 1:4, -1)
[1] 1 2 3
R>
Это также сохраняет дополнительный вызов length()
.
Редактировать: Как отметил Джейсон, этот подход на самом деле не быстрее. Не могу поспорить с эмпирикой. На моей машине:
R> x <- rnorm(1000)
R> microbenchmark( y <- head(x, -1), y <- x[-length(x)], times=10000)
Unit: microseconds
expr min lq median uq max
1 y <- head(x, -1) 29.412 31.0385 31.713 32.578 872.168
2 y <- x[-length(x)] 14.703 15.1150 15.565 15.955 706.880
R>
Когда мне нужно было добавить основные групповые заголовки в репитер, я сделал это с помощью элемента управления Literal в ItemTemplate:
<asp:Literal runat="server" Text='<%# GetGroupHeading(Eval("Group")) %>' />
Метод GetGroupHeading в коде отслеживал предыдущий заголовок группы и отправили обратно '
Попробуйте эту статью от 4 парней из Rolla: Использование элементов управления ListView и DataPager в ASP.NET 3.5: группирование данных с помощью элемента управления ListView
Да Ник дал отличное преимущество. Вот мой код программной части
Dim sCategory_Descr As String
Function GetGroupHeading(ByVal sGroupName As String) As String
Dim sReturn As String
If sCategory_Descr <> sGroupName Then
sCategory_Descr = sGroupName
sReturn = "<H5>Category: " & UCase(sGroupName) & "</H5>"
Else
sReturn = ""
End If
Return sReturn
End Function
и мой item_template
<ItemTemplate>
<tr>
<td style="background-color:#ccc;" colspan="2" id="tdCategory_Placeholder" runat="server" >
<asp:Label Font-Bold="true" ID="Literal1" runat="server" Text='<%# GetGroupHeading(Eval("Category_Descr")) %>' />
</td>
</tr>
<tr>
<td >
<asp:DynamicControl1 />
</td>
<td >
<asp:DynamicControl2 />
</td>
</tr>
</ItemTemplate>