预先感谢您的帮助,我来自Java背景,对Scala还是陌生的。练习。我从功能的角度考虑了一些经典问题。一个这样的问题是必须在某个方向上将矩阵旋转90度的问题,下面是此问题的示例:
https://www.geeksforgeeks.org/inplace-rotate-square-matrix-by-90-degrees/
我要实现的功能具有以下签名:
def rotateMatrix[A](mat: Map[(Int,Int),A],n: Int):Map[(Int,Int),A] = {
mat.map {case (k,v) => k match {
case (i,j) => (???, ???) -> v
}}
}
我觉得应该对i和j进行一些数学变换,以将它们变换为旋转矩阵的坐标。这可能吗?
编辑:这里n是矩阵的大小,例如:对于3X3矩阵,n是3
答案 0 :(得分:0)
我在这里找到了答案:
使用此功能可以实现为:
#include "MyOwnVector.h"
template<typename T>
MyOwnVector<T>::MyOwnVector(const std::initializer_list<T>& list)
{
this->vector_size = list.size();
this->storage = std::make_unique<T[]>(new T[this->vector_size]);
for (size_t i = 0; i < this->vector_size; i++)
{
this->storage[i] = *(list.begin() + i);
}
}
编辑:基于@jwvh的输入,可以通过以下方式将其更新为scala一线式:
def rotateMatrix[A](mat: Map[(Int,Int),A],n: Int):Map[(Int,Int),A] = {
mat map {case (k,v) => k match {
case (i,j) => (j, n + 1 - i) -> v
}}
}