【问题标题】:Setting int using for loop in one line?在一行中使用for循环设置int?
【发布时间】:2018-03-04 12:01:02
【问题描述】:

我有兴趣做这样的事情(C#):

int sum = 0;
for (int i = 0; i < 5; i++)
     sum += i;

但我想在一行中完成。比如:

int sum = (embedded loop)

有没有办法在一行上做到这一点?我希望将此应用于更复杂的字符串操作算法,因此我不能简单地用算术公式替换循环。

【问题讨论】:

  • 有原因吗?
  • 总和 = n* (n+1) / 2
  • @TPN1994 有它的公式,这是正确的解决方案,但你也可以这样做var sum = Enumerable.Range(0,5).Sum();
  • 我希望将其应用于更复杂的算法,该算法返回一个经过处理的字符串,因此我无法用公式替换循环;它实际上需要有一个嵌入式循环。我正在尝试将其作为单行编码挑战的一部分。谢谢!
  • @DanielG:然后举一个更好的例子来说明你正在尝试做什么。

标签: c#


【解决方案1】:
for(int i=0,sum = 0; i<5; sum+=i,++i){}

【讨论】:

  • 顺便说一句,这是一个重复的问题,因为它已经在这里指出:stackoverflow.com/questions/1232176/…
  • 这不是我要问的。这是两行。
  • 好吧,如果您只想在范围内看到 sum,那么您可以将它们放在 1 行中。而且我认为 C# 不能在一行中声明循环范围和该范围之外的变量。
【解决方案2】:

如果您不介意 'sum' 仅在 for 循环的范围内,您可以这样做:

for (int i = 0, sum = 0; i < 5; sum += i, ++i) { // do something }

【讨论】:

    【解决方案3】:

    所以你想在一行中循环并做某事

    首先,将它写在一行中并不会让它运行得更快。你仍然会循环,你仍然会成为O(n)。对于您在问题中遇到的特定问题,您可以执行以下操作:

    var sum = Enumerable.Range(0,5).Sum();
    

    这基本上会收集数字 0,1,2...4 并将它们相加。

    更一般地说,既然你想做某事,你可以使用Aggregate 函数。例如:

    var str = Enumerable.Range(0,5).Aggregate("",(p,c) => p + c); // Note: not efficient at all
    

    将取值 0,1,...4 并与它们进行字符串连接(使用字符串生成器会更好)为您提供字符串 01234

    编辑:

    我正在尝试遍历一个单词列表并将每个单词的标题大小写,然后返回它的 string[].join(" ")

    在这种情况下,类似于:

    var result = string.Join(" ", myListOfWords.Select(w => char.ToUpper(w[0]) + w.Substring(1)));
    

    应该可以正常工作。

    【讨论】:

    • 谢谢,这就是我要找的。我知道这听起来很愚蠢,但这是为了挑战,并不意味着高效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2013-03-01
    • 2020-06-27
    相关资源
    最近更新 更多