C# 从字符串C构建表#
好的,我有一个C# 从字符串C构建表#,c#,html,html-table,contains,stringbuilder,C#,Html,Html Table,Contains,Stringbuilder,好的,我有一个表,它是由一个字符串构建的,看起来像这样: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++; } el
表,它是由一个字符串构建的,看起来像这样: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>");
}
if(breakfastDays.Contains(“1”)){
某人加上(“”);
mo++;
}否则{
某人加上(“”);
}
if(早餐日包含(“2”)){
某人加上(“”);
tu++;
}否则{
某人加上(“”);
}
class=“active”
部分只是告诉css
选中该框
有没有一种更简单的方法来检查字符串
可能会有一些
for in
循环可能?这将解决必须为表编写七个测试的问题:
for (int i = 1; i <= 7; i++)
{
if (breakfastDays.Contains(i.ToString())
{
sb.Append("<td class=\"active\"> </td>"));
}
else
{
sb.Append("<td> </td>");
}
}
对于(int i=1;i是的,可以使用循环。唯一棘手的是增加变量,如果使用数组来增加变量会更容易
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>");
}
}
for(char c='1';c我认为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());
}
publicstaticvoidmain()
{
int[]早餐日=新int[7];
string days=“13467”;
var sb=新的StringBuilder();
对于(int i=0;i<7;i++)
{
if(days.Contains((i+1).ToString())
{
某人加上(“”);
早餐日[i]++;
}否则{
某人加上(“”);
}
}
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>");
}
//设置每天的存储桶,初始计数为0
var dayMap=“1234567”.ToDictionary(c=>c,c=>0);
//对于每个关键(“日”)。。。
foreach(dayMap.Keys.ToList()中的var day)
{
//开始写入单元格
某人加上(“”);
}
这里有很多东西很难理解,但如果您想知道是否有更好的方法来确定breakfastDays是包含“1”还是“5”,请选择breakfastDays.contains()差不多已经很好了。如果你说为什么你必须在这段代码中增加mo
和tu
,我们可能会处于一个更好的位置。你为什么不每天吃早餐呢?问题解决了!嗯。用字符串生成器构建html似乎很麻烦。你确定不想为此使用模板引擎吗?一个完美的例子对于开关
overif-else if-else
+1的使用,我必须执行Contains(Convert.ToString(c)))
但是除了这个完美的答案之外。非常感谢!@DPB:Aha,接受字符的方法是系统.Linq
命名空间中的一个扩展方法。如果你包括了这个,你可以直接使用字符。我在一个已经包含它的项目中测试了代码。@Guffa我刚刚实现了系统。Linq
谢谢,工作起来就像一个魅力。