2012-11-27 2 views
3

목록 목록을 어떻게 바꾸면됩니까?공란을 기본 (T)으로 채우고리스트의 목록을 어떻게 바꾸는가?

public List<List<T>> Transpose(List<List<T>> lists)

내부 목록이 모두 같은 길이하지 않은 경우, 나는

new List<List<int>>{ 
    new List<int>   {1,2,3}, 
    new List<int>   {4,5}, 
    new List<int>   {6,7,8,9} 
}; 

의 전치이 될 것이라고 그래서 default(T)

로 공백을 채우기 위해 싶습니다

new List<List<int>>{ 
     new List<int> {1,4,6}, 
     new List<int> {2,5,7}, 
     new List<int> {3,0,8}, 
     new List<int> {0,0,9} 
    }; 

궁금한 점이 있다면 왜 내가 ' 행렬 클래스를 사용하지 말아라. 내 실제 사용 사례에서 내부 유형은 PropertyDescriptor 또는 String이다.

답변

8

매우 간단합니다 :

당신은 전에 저를 도왔
public static List<List<T>> Transpose<T>(List<List<T>> lists) 
{ 
    var longest = lists.Any() ? lists.Max(l => l.Count) : 0; 
    List<List<T>> outer = new List<List<T>>(longest); 
    for (int i = 0; i < longest; i++) 
     outer.Add(new List<T>(lists.Count)); 
    for (int j = 0; j < lists.Count; j++) 
     for (int i = 0; i < longest; i++) 
      outer[i].Add(lists[j].Count > i ? lists[j][i] : default(T)); 
    return outer; 
} 
+1

. 롤링에게 감사드립니다. –

+0

그레이트 맨! 감사! – makoshichi

관련 문제