C#에서 임시 변수를 사용하지 않고 변수 값 바꾸기
-
C#
에서 튜플 할당 사용 -
+
연산자를 사용하여C#
에서 사용되는 임시 변수를 둘러싸기 -
C#
에서 임시 변수 사용을 숨기기 위해 명시적 구현 대신 함수를 사용하여 값 교환 -
XOR
연산자를 사용하여C#
에서 스왑하는 방법
지금 코드를 작성 중이고 변수 값을 교환하려고 한다고 가정해 보겠습니다. 아마도 다음과 같이 할 것입니다.
using System;
public class Program
{
public static void Main(string[] args)
{
var val_one = 123;
var val_two = 234;
var val_swap = val_one;
val_one = val_two;
val_two = val_swap;
Console.WriteLine("The value after swapping is: " + val_one + " and -> " + val_two);
}
}
이제 여기에서 먼저 val_swap
이라는 임시 변수를 만든 다음 val_one
값을 복사하여 val_one
값이 수정된 후 원래 val_one
값을 다시 val_two
에 쉽게 복사할 수 있습니다. val_swap
의 값을 할당합니다.
오늘 우리는 이 임시 변수의 사용을 제거하고 다른 할당 없이 그러한 교환을 수행하는 방법을 살펴볼 것입니다.
C#
에서 튜플 할당 사용
이제 사용할 수 있는 매우 간단한 방법은 다음과 같이 TUPLE
할당을 사용하는 것입니다.
(val_one, val_two) = (val_two, val_one);
Console.WriteLine("The value after swapping from the tuple method is: " + val_one + " and -> " +
val_two);
출력:
The value after swapping from the tuple method is: 234 and -> 123
이 방법은 Python에서도 사용되었습니다. 그러나 튜플의 대상이 아닙니다.
그러나 때로는 원하는 것을 얻기 위해 속임수를 사용해야 합니다. 아래의 예를 살펴보겠습니다.
+
연산자를 사용하여 C#
에서 사용되는 임시 변수를 둘러싸기
두 개의 숫자가 있다고 가정해 보겠습니다. 7
및 9
. 첫 번째 변수의 값은 7
이고 두 번째 변수의 값은 9
입니다.
9
를 7
에 추가하면 16
이 됩니다. 이제 첫 번째 변수에 16
을 할당해 보겠습니다.
첫 번째 변수의 값으로 9
를 넣으려면 두 번째 변수에서 9
의 값을 빼야 하며 이는 15-9 = 7
이 됩니다. 이 값을 사용하고 첫 번째 변수의 15
에서 빼서 이제 9
값을 얻습니다.
val_one += val_two;
val_two = val_one - val_two;
val_one = val_one - val_two;
Console.WriteLine("The value after swapping is: " + val_one + " and -> " + val_two);
출력:
The value after swapping is: 234 and -> 123
이것이 스와핑하는 동안 임시 변수 사용을 중지하기 위해 간단한 산술을 사용하는 방법을 알 수 있습니다. 반면에 매우 큰 정확한 값이 있는 경우 이는 비효율적일 수 있으며 이러한 산술을 사용하면 일부 값이 손실될 수 있습니다.
임시 변수의 사용을 제거하지 않고 구현을 숨기려면 다음과 같은 것을 사용할 수 있습니다.
C#
에서 임시 변수 사용을 숨기기 위해 명시적 구현 대신 함수를 사용하여 값 교환
다음과 같이 할 수 있습니다.
static void swap(ref int x, ref int y) {
var temp = x;
x = y;
y = temp;
}
그리고 아래와 같이 호출합니다.
swap(ref val_one, ref val_two);
Console.WriteLine("The value after swapping is: " + val_one + " and -> " + val_two);
출력:
The value after swapping is: 234 and -> 123
XOR
연산자를 사용하여 C#
에서 스왑하는 방법
아래 코드를 살펴보자.
val_one ^= val_two ^= val_one ^= val_two;
그리고 그 출력:
The value after swapping is: 0 and -> 123
두 번째 변수가 이제 첫 번째 변수의 값을 갖고 제대로 작동하더라도 첫 번째 값이 0
임을 알 수 있습니다.
이 문제를 해결하려면 어떻게 해야 합니까? 먼저 다음과 같이 코드를 작성해 보겠습니다.
val_one ^= val_two;
val_two ^= val_one;
val_one ^= val_two;
이제 출력은 다음과 같습니다.
The value after swapping is: 234 and -> 123
무슨 일이야? 먼저 첫 번째 문장에서 주어진 코드를 이해합시다.
다음과 같이 확장할 수 있습니다.
val_one = val_one ^ val_two;
val_two = val_two ^ val_one;
val_one = val_one ^ val_two;
이제 첫 번째 코드가 나중에 제시된 코드와 유사하다고 말할 수 있습니다. 그러면 어떻게 작동하지 않지만 후자는 잘 수행됩니까?
이러한 산술 연산의 순서를 변경하면 다른 결과가 나타날 수 있습니다. 전자의 코드에서 val_one
은 자체적으로 XOR
을 가지므로 결과는 0입니다.
그러나 후자의 경우 차수가 이미 정의되어 있고 값이 완벽하게 계산되므로 차이가 발생합니다.
그러나 더 높은 코드 수준에 대해 XOR
스와핑을 사용하지 마십시오. 그것은 안전하지 않으며 대용으로 보관해야 합니다.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub