循环遍历C#中的列表

时间:2012-12-20 00:38:34

标签: c#

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

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

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

它应该写的方式是相同的Item.Category值应该一起写,这意味着如果item.category有5个值,其中3个相同而另外2个不同,则3个项应该是组合意味着item.category将表示标题,其他值如数字,格式等将是标题内的内容。

它应该显示如下内容:

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

  }

如果我难以阅读和理解,请告诉我。

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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>
    <% } %>
<% } %>    

答案 2 :(得分:0)

快速提案:

遍历 List&lt;项目&gt;测试并在新的列表中按项目复制项目&lt;项目&gt; newTest :使用newTest.Add(item);

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

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

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

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