List<List<T>> transpose<T>(List<List<T>> source) {
if (source.isEmpty) return source;
var length = source.first.length;
// Maybe add check that all lists have same length.
return [for (var i = 0; i < length; i++)
[for (var j = 0; j < source.length; j++) source[j][i]]];
}
如果您关心验证输入,可以检查所有列表是否具有与length相同的长度:
for (var i = 1; i < source.length; i++) {
if (source[i].length != length) {
throw ArgumentError.value(source, "source",
"All lists must have same length");
}
}
3条答案
按热度按时间yc0p9oo01#
你的问题应该详细说明,你应该概括背后的逻辑。
在您的特定情况下,解决方案可能是:
xbp102n02#
假设您的问题是将列表的所有前几个元素收集到一个新列表中,并将列表的所有最后几个元素收集到另一个列表中。
您可以使用以下代码:
现在updatedList中的内容为
[[1,3][2,4]]
eaf3rand3#
如果你想要一般的“转置”操作,即取一个等长的列表的列表,并创建一个第一,第二等元素的列表的列表,那么:
如果您关心验证输入,可以检查所有列表是否具有与
length
相同的长度: