참고 : 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을 자동으로 계산하는 방법을 생각해 보게 되었는데요...
근데 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 |

