在不使用临时变量的情况下交换两个数字
Swap two numbers without using temp variable
我浏览了几个示例并遇到了以下代码:
(a, b) = (b, a);
有人提到这可以用来交换两个变量的值。
我试了一下如下:
int a = 5, b = 10;
Console.WriteLine(a + " " + b); // Prints --> 5 10
(b, a) = (a, b);
Console.WriteLine(a + " " + b); // Prints --> 10 5
这是什么语法?这是新的东西还是获得交换结果的一些奇怪的技巧。它也可以与任意数量的变量一起使用吗?
喜欢:
(a, b, c) = (c, a, b); // a=c; b=a; c=b; or even more variables
它在 =
的右侧创建一个元组,然后在左侧将其解构(变成不同的变量)。参见 this page of the fine manual
如果您熟悉几年前引入的 Tuple,实际上编译器正在为您编写 类似这样的东西:
var t = new Tuple<int,int>(a, b); //create with Item1 = a and Item2 = b
b = t.Item1;
a = t.Item2;
它到底会写什么代码,我不知道,但这就是它的精神;要创建一个临时的(可能是值)元组,将 a 和 b 分配给它然后以相反的顺序再次将它们取出
我浏览了几个示例并遇到了以下代码:
(a, b) = (b, a);
有人提到这可以用来交换两个变量的值。
我试了一下如下:
int a = 5, b = 10;
Console.WriteLine(a + " " + b); // Prints --> 5 10
(b, a) = (a, b);
Console.WriteLine(a + " " + b); // Prints --> 10 5
这是什么语法?这是新的东西还是获得交换结果的一些奇怪的技巧。它也可以与任意数量的变量一起使用吗?
喜欢:
(a, b, c) = (c, a, b); // a=c; b=a; c=b; or even more variables
它在 =
的右侧创建一个元组,然后在左侧将其解构(变成不同的变量)。参见 this page of the fine manual
如果您熟悉几年前引入的 Tuple
var t = new Tuple<int,int>(a, b); //create with Item1 = a and Item2 = b
b = t.Item1;
a = t.Item2;
它到底会写什么代码,我不知道,但这就是它的精神;要创建一个临时的(可能是值)元组,将 a 和 b 分配给它然后以相反的顺序再次将它们取出