如何转置列表清单?
public List<List<T>> Transpose(List<List<T>> lists)
如果内部列表的长度不一样,我想用default(T)
填充空白
这样的转置
new List<List<int>>{
new List<int> {1,2,3},
new List<int> {4,5},
new List<int> {6,7,8,9}
};
将是
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。
答案 0 :(得分: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;
}