+ 2
Swap
How do i swap the values of two integer variables?
14 Answers
+ 9
int a=0, b=1;
1) int temp=a;
a=b;
b=temp;
2)a ^= b;
b ^= a;
a ^= b;
3) (a, b)=(b, a);
UPD https://www.sololearn.com/Profile/4528074/?ref=app method
4)a+=b;
b=a-b;
a-=b;
+ 6
Brian Tuple Deconstruction is one of several new language features that came out with C# 7.
You might find this detailed review of tuple deconstruction interesting:
https://github.com/dotnet/roslyn/blob/master/docs/features/deconstruction.md
To get a sense of the other awesome features that came out with C# 7, take a look at this link:
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7
Oh heck... it's worth checking these out as well:
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8
- Continues expanding support for pattern matching in a static typed language.
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9
- Top Level Statements is a standout feature that removes the verbosity of specifying the namespace, class, and static main method.
C# is such an expressive language, it's difficult for me to find as much joy coding in any other static typed language.
Kotlin may be the closest to C# for me in this regards.
Sorry for the tangent. ๐
+ 6
Brian We're still stuck on C# 7 for our applications as. I want to use features of C# 8 so badly. Hopefully, we'll get the upgrades in with an upcoming tech debt sprint?
I'm still unpacking the awesome features of C# 9 and just discovered support for covariant return types. Mind is blown! ๐คฏ๐
Seriously though... overloading methods based on different return types have huge potential for making code even more concise.
https://daveabrock.com/2020/07/14/c-sharp-9-target-typing-covariants#:~:text=With%20return%20type%20covariance%2C%20you,returns%20a%20more%20specific%20type.&text=Now%2C%20you%20can%20return%20the%20more%20specific%20type%20in%20C%23%209.
+ 4
Brian, you're wrong
https://code.sololearn.com/cQCtAX0Y4tr8/?ref=app
+ 3
David Carroll thank you, much! My C# knowledge is definitely a couple revisions old. My last workplace was reluctant to upgrade.
+ 3
I've seen people use method #2 and #4 also seen people say it doesn't always work (forgot the why). So beginner context, take method #1, or #3 which looks pretty neat (so long as the framework was updated).
Hats off David Carroll for the updates links, fresh from the oven ๐
+ 2
๐ธ๐๐๐๐๐๐ ๐๐ฃ๐ช๐๐๐๐ช I see clearly that I am wrong. I did try to prove it to myself before posting, and I got a syntax error. Thank you for showing me something new!
So, add my suggestion as number 4.
+ 2
Brian
Right, I remember slightly someone mentioned that. So how about negative numbers support in #2 and #4? are they all good for it?
I still think #1 is the clearest and simple method, especially for beginners. Though we've all seen people asking how to do swaps without interim storage, many a time here #scratchinghead#
+ 2
Big Thanks Brian ๐
+ 1
Thanks ๐ค
+ 1
๐ธ๐๐๐๐๐๐ ๐๐ฃ๐ช๐๐๐๐ช option 3) is valid in Python, but not in C#. May I suggest a replacement for 3?
3) a += b;
b = a - b;
a -= b;
EDIT: Oops, 3) IS valid in C# after all!
+ 1
Brian, ok :)
+ 1
Ipang #2 would not work for floating point numbers, unless they were cast to an equivalent-sized integer type.
And #4 would be unreliable for floating point numbers due to floating point math issues, magnitude truncation, et al. Also, #4 may cause overflow in any data type if the sum of a+b is too large.
+ 1
Ipang negative integers should work just fine with all the methods, including #2 and #4 (while heeding the warning about a+b overflow).
I fully agree that #1 is the most universal and recommended solution. It is good for all data types, value ranges, and not limited to any particular language.