好的,所以我有一个<tr>
表是从字符串构建的,如下所示:13467
1= monday
2= tuesday
...
7= sunday
so 13467 = mon,wed,thurs,sat,sun
我现有的代码手动检查字符串,如此
if (breakfastDays.Contains("1")) {
sb.Append("<td class=\"active\"> </td>");
mo++;
} else {
sb.Append("<td> </td>");
}
if (breakfastDays.Contains("2")) {
sb.Append("<td class=\"active\"> </td>");
tu++;
} else {
sb.Append("<td> </td>");
}
class="active"
部分只是告诉css
选中此框。
有没有更简单的方法来进行字符串检查?
也许某些for-in
循环可能?
答案 0 :(得分:7)
是的,您可以使用循环。唯一棘手的是你增加的变量,如果你使用一个数组会更容易。
for (char c = '1'; c <= '7'; c++) {
if (breakfastDays.Contains(c)) {
sb.Append("<td class=\"active\"> </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> </td>");
}
}
答案 1 :(得分:1)
我认为mo
和tu
是计算一周中几天的计数。更好的方法可能是数组:
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\"> </td>");
breakfastDays[i]++;
} else {
sb.Append("<td> </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("> </td>");
}
答案 3 :(得分:0)
这将解决必须为表编写七个测试的问题:
for (int i = 1; i <= 7; i++)
{
if (breakfastDays.Contains(i.ToString())
{
sb.Append("<td class=\"active\"> </td>"));
}
else
{
sb.Append("<td> </td>");
}
}
我们可以肯定会更聪明,但我不想在代码中跳过mo++
和tu++
的重要性。