참고 : http://blogs.msdn.com/wriju/archive/2009/02/28/c-4-0-new-extension-method-zip.aspx
저는 이 방법을 알기 전에 다음과 같은 방법을 사용 했었지요.
Web 서버에 Post 방식으로 요청을 보낼때 Query String을 사용하게 되었는데, 그 형식은 다음과 같았습니다.
custom_action_id=1&id=330&resource_type=lot&uuid=b657895parameter 값은 각각 Key 와 Value로 구성되어 있었습니다. 그래서 위와 같은 query string을 자동으로 계산하는 방법을 생각해 보게 되었는데요...
Select 를 이용해서 원하는 구문을 얻을 수 있었지요. 사실 linq에 익숙해지기 위해 만들어 보았을 뿐 복잡하게 할 필요는 없었습니다.
근데 C# 4.0 에서 소개된 Zip 메소드를 이용해서 다른 방법으로 바꿔 볼 수 있었습니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string[] parms = { "custom_action_id", "id", "resource_type", "uuid" }; string[] values = { "1", "330", "Lot", "b53c37ed8c1f8a8075961400b1b4606eb12fd81b"}; Console.WriteLine(ZipExtentionMethodTest(parms, values)); Console.ReadLine(); } public static string ZipExtentionMethodTest(string[] paramerters, string[] values) { // parse dict string ptrs = null; var parmStr = paramerters.Zip( values, (paramerter, value) => new { inplace = ( values[values.Length - 1] != value ? paramerter + "=" + value + "&" : paramerter + "=" + value ) }); foreach (var item in parmStr) { ptrs += item.inplace; } return ptrs; } } }
위 코드랑 비교해 본다면 전 코드의 경우 Object 배열 타입의 dict란 변수를 받아서, select 구문으로 key 와 value 값을 결합하고 인덱스가 마지막일 경우 다른 조건의 결합 을 사용하게 되어 있습니다.
그런데 Zip 코드를 이용하면, 간단히 두개의 배열로 부터 인자를 받아 하나로 합칠 수 있지요. 하지만 인덱스를 사용할 수 없어서 조건은 배열의 길이를 이용하였습니다.
Zip을 사용하면 두개의 배열에 있는 element 들을 하나로 합칠 때 사용하면 좋은 방법이 될 것 같네요.
'C#' 카테고리의 다른 글
Welcome to Dynamic C#(2) - Wanna be a polyglot. (2) | 2009.05.17 |
---|---|
Welcome to Dynamic C#(1) - 첫만남. (1) | 2009.05.04 |
[C# 4.0] Generic Covariance And Contra Variance (5) | 2009.04.13 |
[C# 4.0] Duck Typing (6) | 2009.04.06 |
[C# 4.0] Named and Optional Parameters (1) | 2009.04.06 |