2013-08-27 49 views
6

tôi có một danh sách trong marker miễn phí như sau:Nhận danh sách phụ từ một danh sách trong Freemarker

<#assign listVar = ["v1", "v2", "v3", "v4" ] /> 

Từ danh sách trên, chúng tôi chỉ muốn trong danh sách phụ như v1 và v2.

Tôi đã lang thang để có được danh sách phụ trong điểm đánh dấu miễn phí. Nhưng không thể tìm được.

Mọi trợ giúp sẽ được đánh giá cao.

+0

Có thể hữu ích [link1] (http://bethecoder.com/applications/tutorials/template-engines/freemarker/split-the-string-and-get- substrings-by-index.html), [link2] (http://freemarker.624813.n4.nabble.com/Splitting-a-list-and-adding-elements-td3341910.html) –

+0

Tôi nghĩ đoạn mã này cho ý tưởng cho yêu cầu của bạn <#list listVar như x> $ {x} <# nếu x = "v2"><#break>

+0

Nhưng, tôi không muốn để có được danh sách phụ dựa trên nội dung của danh sách. Thay vào đó tôi muốn dựa trên các chỉ mục của danh sách. Bạn có ý tưởng gì không? – venky

Trả lời

1

Bạn có thể sử dụng biến số index khi bạn liệt kê chuỗi.

<#assign listVar = ["v1", "v2", "v3", "v4" ] /> 
<#list listVar as aVar> 
    <#if aVar_index > 2><#break/></#if> 
</#list> 

Bạn cũng có thể phân vùng trình tự bằng cách sử dụng chunk. Điều này sẽ tách chuỗi trong nhiều chuỗi của kích thước nhất định.

<#assign partitions = listVar?chunk(2) /> 
<#assign firstPartition = partitions?first /> 

Nguồn: FreeMarker Manual

Tuy nhiên, nó là tốt hơn để lọc dữ liệu trước khi chuyển cho mẫu.

7

Nếu bạn thực sự muốn làm điều đó slice dựa trên các chỉ số:

<#assign listVar = ["v1", "v2", "v3", "v4" ] /> 
<#assign sublistVar = listVar[0..1] /> 

Nhưng hãy cẩn thận, nó sẽ dừng lại với lỗi nếu chỉ số này ra khỏi phạm vi. Tùy thuộc vào những gì bạn cần, bạn có thể muốn sử dụng ?chunk(2) để thay thế.

Cập nhật: Để tránh lỗi lập chỉ mục, trong FreeMarker 2.3.21 bạn có thể phát hành listVar[0..*2], sẽ cắt ra 2 mục hoặc ít hơn nếu ít khả dụng hơn. (Cắt lát độc quyền cũng có thể hữu ích: listVar[0..<2])

+0

bạn đã lưu ngày của tôi. – Devz

Các vấn đề liên quan