列出用单词替换数字的集合

时间:2011-04-23 16:23:52

标签: c#

我正在尝试改进列表集合,我必须替换可被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());
        }

3 个答案:

答案 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整除。

你选择哪一个很大程度上取决于你的口味。就个人而言,我会选择后者,因为它简洁但仍传达了代码的意图。我刚刚完成的一些非常基本的测试表明,它的执行速度也会更快。