일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 오일러 프로젝트
- Python
- 소수
- 소인수분해
- c#
- 베이지안
- Autoencoder
- mnist
- Convolutional Neural Network
- 히토요시
- backpropagation
- Gram matrix
- 냥코 센세
- neural network
- A Neural Algorithm of Artistic Style
- 합성곱 신경망
- deep learning
- SQL
- 오토인코더
- 전처리
- 신경망
- 역전파법
- 자전거 여행
- CNN
- 딥러닝
- 비샤몬당
- bayesian
- 수달
- project euler
- 역전파
- Today
- Total
통계, IT, AI
C#에서 Zip 및 익명형식의 배열 사용하기 본문
1. 들어가며
코딩을 하다가 특정 순간에만 사용되고 이후로는 쓸 일이 없는 변수를 만들어야 했다. 상황을 간단하게 말하자면, 아래와 같은 dictionary에서 B,D,E에 해당하는 Value를 바꾸어야 했는데 B,D,E라는 정보는 더이상 사용되지 않았다.
1 2 3 4 5 6 7 | 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라는 변수는 이후로도 쓰일 일이 없는 변수이다. 의미없이 메모리를 차지하며 가독성도 떨어져 마음에 들지 않았다.
1 2 3 4 5 6 7 | 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를 매칭하기 어렵다는 점이다.
1 2 3 4 5 6 | 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를 반복해서 써줘야 한다는 것이 걸린다.
1 2 3 4 5 6 | 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.과 동일한 결과를 아래와 같이 구현할 수 있었다.
1 2 | 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 |