我用这一行来创建一个元组数组:
Tuple<String^, double>^ t = gcnew Tuple<String^, double>("a", 2.6);
但是如何创建多维数组呢?
E.g:
t[][] = {
{"a", 2.6},
{"b", 7.1},
{"c", 2.4},
{"d", 2.7}
};
即使我们这样做,我怎样才能获得数组中的元素,例如:
for (int i = 0; i < 4; i++){
textBox1->Text += t[i][0];
}
答案 0 :(得分:2)
使用MSDN。
using namespace System;
int main()
{
const unsigned rank = 2;
const unsigned dim1 = 3;
const unsigned dim2 = 4;
auto arr = gcnew array<Tuple<String ^, double> ^, rank>(dim1, dim2);
for(int i = 0; i < dim1; i++)
for(int j = 0; j < dim2; j++)
arr[i, j] = gcnew Tuple<String ^, double>("@_@", i * j);
return 0;
}
rank
是数组的维数,所以在这种情况下它是一个二维数组。
<强> UPD 强>
使用聚合初始化:
using elemT = Tuple<String ^, double>; // somewhere at top-level
//...
auto arr =
gcnew array<elemT ^, rank>{{gcnew elemT{"@_@", 1.}, gcnew elemT{"^_^", 2.}},
{gcnew elemT{"~_~", 3.}, gcnew elemT{"+_+", 4.}}};
<强> UPD2 强>
随着神秘面纱的揭晓,OP并不需要多维数组,只需要一组元组:
#include <iostream>
using namespace System;
using subarrT = array<double>;
using elemT = Tuple<String ^, String ^, subarrT ^>;
int main()
{
auto arr = gcnew array<elemT ^>{
gcnew elemT{"Name1", "Surname1", gcnew subarrT{29., 123., 10., 1230.}},
gcnew elemT{"Name2", "Surname2", gcnew subarrT{49., 32., 8., 256.}},
};
std::cout << static_cast<double>(arr[0]->Item3[1]) << std::endl; // 123.
return 0;
}