Построение таблицы из строки C#
Итак, у меня есть таблица <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
петли?
4 ответа:
Да, вы можете использовать цикл. Единственная сложность-это переменные, которые вы увеличиваете, было бы проще, если бы вы использовали массив для этого.
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>"); } }
Я думаю, что
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()); }
Таким образом, вам не понадобятся отдельные переменные для каждого дня.
Я бы сначала посмотрел, можно ли избавиться от отдельных переменных для счетчиков дня, которые кажутся неуклюжими и подверженными проблемам. Это, и сведение этого к простому циклу, что-то вроде:
// 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>"); }
Это исправит проблему необходимости написания семи тестов для таблицы:
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++
в вашем коде.