-2

假设我有一个包含 5 个值的列表。

List<Item> Test
Test[0] 
{Item.category,Item.Number,Item.Format,Item.Order} etc

我的要求是我必须根据这个列表中的值编写一些 HTML 代码。

应该写的方式是相同的 Item.Category 值应该写在一起,意思是如果有 5 个值,item.category其中 3 个相同,另外 2 个不同,那么这 3 个项目应该组合在一起,意思是item.category标题其他值如数字、格式等将是标题内的内容。

它应该显示如下内容:

<h1>Item.category(the 3 same categories should appear here just one)</h1>
{
  all other elements * 3 times

  }

如果我使阅读和理解变得困难,请告诉我。

4

3 回答 3

0

首先按类别对列表进行排序:

Test.Sort((x, y) => x.Category.CompareTo(y.Category));

当您遍历项目时,跟踪当前类别,并在它发生变化时写出一个标题:

string category = null;
foreach (Item item in Test) {
  if (category != item.Category) {
    category == item.Category;
    %><h1><%: item.Category %></h1><%
  }
  // output item here
}
于 2012-12-20T00:46:26.297 回答
0

你的问题有点难以理解,但我猜你想根据类别显示项目,每个项目出现在其适当的类别下,每个类别只显示一次。

你可以尝试这样的事情:

<% foreach(var g in Test.GroupBy(i => i.category)) { %>
    <h1><%= g.Key %></h1>
    <ul>
    <% foreach(var i in g) { %>
        <li><%= String.Format("Number: {0}, Format: {1}, Order: {2}",
                              i.Number,
                              i.Format,
                              i.Order) %></li>
    <% } %>
<% } %>    
于 2012-12-20T00:48:47.227 回答
0

快速建议:

遍历List< Item > Test并在新List< Item > newTest中复制每个项目的项目:使用 newTest.Add(item);

但首先,在 .Add(); 之前 :

  1. 如果该项目已存在,请查看 newTest-List。如果是,不要复制,如果不是,复制!

  2. 结果:newTest-List 将仅包含不同的(无双)条目

  3. 遍历 newTest-List 并在 newTest-List 的基础上创建您的 html 元素!(for 或 foreach)

于 2012-12-20T00:52:07.563 回答