fn transpose<T>(original: Vec<Vec<T>>) -> Vec<Vec<T>> {
assert!(!original.is_empty());
let mut transposed = (0..original[0].len()).map(|_| vec![]).collect::<Vec<_>>();
for original_row in original {
for (item, transposed_row) in original_row.into_iter().zip(&mut transposed) {
transposed_row.push(item);
}
}
transposed
}
2条答案
按热度按时间ee7vknir1#
可以使用一些迭代器:
作为
user4815162342
的注解,这里是一个没有Clone
的版本:Playground
sy5wg1nm2#
问题是 “我知道如何用两个for循环来完成它,但有没有更聪明/更短的方法来实现它的功能”,然而这可能是标题的最佳答案。下面是一个两个-
for
-循环的解决方案,它避免了T: Clone
,也避免了为迭代器分配临时Vec
:有人可能会使它比我更“功能化”,但这已经有点难读了,尽我所能尝试。