我正在尝试改进列表集合,我必须替换可被2和10整除的值,并用dTen替换可被2整除的所有内容,使用dTen替换10?
我的代码使用一个可分割的语句而不是两个。
var num = new List<string>();
for (int n = 0; n < 101; n++)
{
num.Add(n % 2 == 0 ? "dTwo" : n.ToString());
num.Add(n % 10 == 0 ? "dTen" : n.ToString());
}
答案 0 :(得分:1)
由于任何可被10整除的数字也可被2整除,因此您必须切换添加语句,如果您有一个可被10整除的数字,则继续使用下一个数字:
var num = new List<string>();
for (int n = 0; n < 101; n++)
{
if( n % 10 == 0)
{
num.Add("dTen");
}
else num.Add(n % 2 == 0 ? "dTwo" : n.ToString());
}
答案 1 :(得分:1)
如果可以,我可以尝试避免在实际循环的已定义构造的一侧使用循环控件,即。如果可以,我宁愿避免使用continue
,这有点像使用goto
语句。对于这种情况,我会采用简单明了的方法,我认为这种方法具有可读性,可维护性和简单性,尽管有点冗长。
如果需要,您可以切换if / else if语句的顺序来更改优先级,在这种情况下n % 10
具有优先级
var num = new List<string>();
for (int n = 0; n < 101; ++n)
{
if (n % 10 == 0)
{
num.Add("dTen");
}
else if (n % 2 == 0)
{
num.Add("dTwo");
}
else
{
num.Add(n.ToString());
}
}
答案 2 :(得分:0)
我将在这里采取两种方法,第一种方法是详细的,但是以一种非常易读的方式传达了你想要做的事情:
var num = new List<string>(101);
for (int i = 0; i < 101 ; i++)
{
if (i == 0)
{
num.Add(i.ToString());
}
else if (i % 10 == 0)
{
num.Add("dTen");
}
else if (i % 2 == 0)
{
num.Add("dTwo");
}
else
{
num.Add(i.ToString());
}
}
第二种使用更简洁的LINQ-y类型方法,就像这样。
var num = Enumerable.Range(0, 101)
.Select(
n => n == 0 ? n.ToString() :
n % 10 == 0 ? "dTen" :
n % 2 == 0 ? "dTwo" :
n.ToString())
.ToList();
请注意,我还考虑了0边缘情况,否则会报告0可被10整除。
你选择哪一个很大程度上取决于你的口味。就个人而言,我会选择后者,因为它简洁但仍传达了代码的意图。我刚刚完成的一些非常基本的测试表明,它的执行速度也会更快。