C#

Dictionary<string,List<string>> 타입 첫 번째 Value만 추출하기

littlemk 2020. 3. 17. 10:35
{

  "EmailList": {

    "www.fnffn.com": [

      "b69aa3080a29384e63f6b67002031560-15705007@contact.gandi.net",

      "admin@www.fnffn.com",

      "administrator@www.fnffn.com",

      "hostmaster@www.fnffn.com",

      "postmaster@www.fnffn.com",

      "webmaster@www.fnffn.com",

      "admin@fnffn.com",

      "administrator@fnffn.com",

      "hostmaster@fnffn.com",

      "postmaster@fnffn.com",

      "webmaster@fnffn.com"

    ],

    "test.fnffn.com": [

      "b69aa3080a29384e63f6b67002031560-15705007@contact.gandi.net",

      "admin@test.fnffn.com",

      "administrator@test.fnffn.com",

      "hostmaster@test.fnffn.com",

      "postmaster@test.fnffn.com",

      "webmaster@test.fnffn.com",

      "admin@fnffn.com",

      "administrator@fnffn.com",

      "hostmaster@fnffn.com",

      "postmaster@fnffn.com",

      "webmaster@fnffn.com"

    ],

    "re.fnffn.com": [

      "b69aa3080a29384e63f6b67002031560-15705007@contact.gandi.net",

      "admin@re.fnffn.com",

      "administrator@re.fnffn.com",

      "hostmaster@re.fnffn.com",

      "postmaster@re.fnffn.com",

      "webmaster@re.fnffn.com",

      "admin@fnffn.com",

      "administrator@fnffn.com",

      "hostmaster@fnffn.com",

      "postmaster@fnffn.com",

      "webmaster@fnffn.com"

    ]

  }

}

 

위의 처럼 Dictionary<string,List<string>>의 json 타입이 있다고하면..

 

내 경우엔 각각의 도메인마다 맨 첫 메일주소를 가져와야만 했다.

 

ㅠㅠ c#엔 아직 문법이 많이 약해서.. 이리저리 묻고 찾아봐서 결국엔 알아냈다.

 

1번째 방법이다.

var EmailListFirst = approvereListResponse.EmailList.SelectMany(s => s.Value.Take(1));

 

위의 결과로도 나타낼 수 있는데... 문제는 이렇게 하게될 경우 SelectMany 메소드가 char 배열로 떨어트린다는 단점이 있다. 

(approvereListResponse.EmailList : 위 json 타입을 Linq 형식으로 만듦)

 

 

때문에 내 경우엔 위 EmailListFirst라는 변수를 또 다른 List 변수에 copy해야 하는데.. 위의 경우로 넣게되면 개체오류가 뜰 것이다.

 

이때는 다음과 같이 사용하면된다.

var EmailListFirst = approvereListResponse.EmailList.Select(s => s.Value[0]).ToList();

 

위 코드로 사용하게되면 List형식으로 만들어 다른 List 타입에 copy할 때 매우 쉬워진다!

 

내 경우엔 EmailListFirst라는 변수를 Session에 담고있어야 했는데, List에 카피할경우

 

List<string> Email = (List<string>)Session["세션명"]

으로 담아주면 끝!!! ㅎ