Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- neural network
- Autoencoder
- mnist
- 오일러 프로젝트
- 수달
- 냥코 센세
- 소인수분해
- Convolutional Neural Network
- c#
- 히토요시
- 자전거 여행
- A Neural Algorithm of Artistic Style
- 역전파법
- Gram matrix
- 전처리
- SQL
- 딥러닝
- backpropagation
- project euler
- 비샤몬당
- 오토인코더
- 소수
- CNN
- bayesian
- Python
- 베이지안
- deep learning
- 역전파
- 합성곱 신경망
- 신경망
Archives
- Today
- Total
통계, IT, AI
C#에서 Zip 및 익명형식의 배열 사용하기 본문
1. 들어가며
코딩을 하다가 특정 순간에만 사용되고 이후로는 쓸 일이 없는 변수를 만들어야 했다. 상황을 간단하게 말하자면, 아래와 같은 dictionary에서 B,D,E에 해당하는 Value를 바꾸어야 했는데 B,D,E라는 정보는 더이상 사용되지 않았다.
Dictionary<string, int> weights = new Dictionary<string, int>(); weights.Add("A", 75); weights.Add("B", 80); weights.Add("C", 67); weights.Add("D", 94); weights.Add("E", 78); weights.Add("F", 81);
2. 구현
2.1. 최초 구현
처음에는 Key와 Value를 따로 선언하였다. 물론 문제 없이 컴파일이 되고 잘 돌아가지만 id와 w라는 변수는 이후로도 쓰일 일이 없는 변수이다. 의미없이 메모리를 차지하며 가독성도 떨어져 마음에 들지 않았다.
string[] id = {"B","D","E"}; int[] w = {77, 97, 69}; for( int i=0; i<id.Length; i++) { weights[id[i]] = w[i]; }
2.2. Zip
Python에는 이런 경우에 사용하기에 알맞게 Zip이라는 함수가 있다. C#에도 있다는 것을 확인하고 Zip과 익명함수를 이용하여 코드를 수정하였다. 의미없는 변수를 선언하지 않아 더 좋아 보인다. 다만 한가지 걸리는 점은, 바꾸어야 할 값이 많아진다면 Key와 Value를 매칭하기 어렵다는 점이다.
foreach( var weight_info in new [] {"B","D","E"}.Zip( new [] {77, 97, 69}, (k, new_weight) => new{ k=k, v=new_weight})) { weights[weight_info.k] = weight_info.new_weight; }
2.3. 익명형식의 배열
마지막으로 익명 형식의 배열을 이용하였다. 깔끔해 보이며 k에 해당하는 v를 찾기도 쉽다. 하지만 k와 v를 반복해서 써줘야 한다는 것이 걸린다.
foreach( var weight_info in new []{ new{ k="B", v=77}, new{ k="D", v=97}, new{ k="E", v=69}}) { weights[weight_info.k] = weight_info.v; }
3. 마치며
무엇을 사용할까 고민하다가 결국 2.3. 익명형식의 배열을 사용하는 것으로 하였다. 어찌됬든 제일 보기에 깔끔했기 때문이다. 더 깔끔하게 할 수 있는 방법이 있는지 계속 고민해봐야겠다.
Python에서 Zip에 관한 아이디어를 얻었으니 Python에도 익명형식이 있는지 알아보았는데 없었다. 대신 dict을 사용하여 2.3.과 동일한 결과를 아래와 같이 구현할 수 있었다.
for k, v in {"B":77, "D":97, "E":69}.items(): weights[k] = v;
Python이 짱인듯하다.
'IT > 기타' 카테고리의 다른 글
[python] mutable vs immutable (0) | 2017.11.28 |
---|---|
[TensorFlow] 모델 저장 및 복원 (0) | 2017.09.06 |
[기타] 티스토리 기초 설정 (1) | 2017.07.09 |
C#에서 이벤트 사용하기 (1) | 2017.01.29 |
C#과 R을 연동하기 (2) | 2016.09.27 |
Comments