从字符串C#构建表

时间:2014-12-08 22:44:16

标签: c# html html-table contains stringbuilder

好的,所以我有一个<tr>表是从字符串构建的,如下所示:13467

1= monday
2= tuesday
...
7= sunday
so 13467 = mon,wed,thurs,sat,sun

我现有的代码手动检查字符串,如此

if (breakfastDays.Contains("1")) {
        sb.Append("<td class=\"active\">&nbsp;</td>");
        mo++;
    } else {
        sb.Append("<td>&nbsp;</td>");
    }

    if (breakfastDays.Contains("2")) {
        sb.Append("<td class=\"active\">&nbsp;</td>");
        tu++;
    } else {
        sb.Append("<td>&nbsp;</td>");
    }

class="active"部分只是告诉css选中此框。

有没有更简单的方法来进行字符串检查?

也许某些for-in循环可能?

4 个答案:

答案 0 :(得分:7)

是的,您可以使用循环。唯一棘手的是你增加的变量,如果你使用一个数组会更容易。

for (char c = '1'; c <= '7'; c++) {
  if (breakfastDays.Contains(c)) {
    sb.Append("<td class=\"active\">&nbsp;</td>");
    switch (c) {
      case '1': mo++; break;
      case '2': tu++; break;
      case '3': we++; break;
      case '4': th++; break;
      case '5': fr++; break;
      case '6': sa++; break;
      case '7': su++; break;
    }
  } else {
    sb.Append("<td>&nbsp;</td>");
  }
} 

答案 1 :(得分:1)

我认为motu是计算一周中几天的计数。更好的方法可能是数组:

public static void Main()
{
    int[] breakfastDays = new int[7];
    string days = "13467";
    var sb = new StringBuilder();

    for (int i = 0; i < 7; i++)
    {
        if (days.Contains((i + 1).ToString()))
        {
            sb.Append("<td class=\"active\">&nbsp;</td>");
            breakfastDays[i]++;
        } else {
            sb.Append("<td>&nbsp;</td>");
        }
    }

    Console.WriteLine(sb.ToString());
}

这样,您每天都不需要单独的变量。

答案 2 :(得分:1)

我首先看看你是否可以摆脱日间计数器的个别变量,这看起来很笨拙且容易发生问题。那,并将其简化为一个简单的循环,如:

// Set up buckets for each day, with an initial count of 0
var dayMap = "1234567".ToDictionary(c => c, c => 0);

// For each key ("day")...
foreach (var day in dayMap.Keys.ToList())
{
    // Start writing the cell
    sb.Append("<td");
    // Check if input string contains that key
    if (breakfastDays.Contains(day)) 
    {
        // Increment the value in our day bucket
        dayMap[day]++;
        // Make the cell "active"
        sb.Append(" class=\"active\"");
    } 
    // Finish writing the cell
    sb.Append(">&nbsp;</td>");
}

答案 3 :(得分:0)

这将解决必须为表编写七个测试的问题:

for (int i = 1; i <= 7; i++)
{
    if (breakfastDays.Contains(i.ToString())
    {
        sb.Append("<td class=\"active\">&nbsp;</td>"));
    }
    else
    {
        sb.Append("<td>&nbsp;</td>");
    }
}

我们可以肯定会更聪明,但我不想在代码中跳过mo++tu++的重要性。