这段代码工作正常:
var newArray = new Rectangle[newHeight, newWidth];
for (int x = 0; x < newWidth; x++)
for (int y = 0; y < newHeight; y++)
newArray[y, x] = (x >= width) || (y >= height) ? Rectangle.Empty : tiles[y, x];
Run Code Online (Sandbox Code Playgroud)
但我没有太多运气用Array.Copy取代它.基本上,如果调整大小的数组较大,则只需在边缘添加空白矩形.如果它小,那么它应该切断边缘.
这样做时:
Array.Copy(tiles, newArray, newWidth * newHeight);
它弄乱了阵列,它的所有内容都变得混乱,并且不保留它们的原始索引.也许我只是有一个脑力计或其他什么?
请在回答之前阅读整个问题.
我有这个多维数组:
$data = array(
'user' => array(
'email' => 'user@example.com',
'name' => 'Super User',
'address' => array(
'billing' => 'Street 1',
'delivery' => 'Street 2'
)
),
'post' => 'Hello, World!'
);
Run Code Online (Sandbox Code Playgroud)
我希望它变平,变成:
$data = array(
'user.email' => 'user@example.com',
'user.name' => 'Super User',
'user.address.billing' => 'Street 1',
'user.address.delivery' => 'Street 2',
'post' => 'Hello, World!'
);
Run Code Online (Sandbox Code Playgroud)
重要:
钥匙对我来说非常重要.我希望它们连接起来,用句点分隔.
它应该适用于任何级别的嵌套.
谢谢!
关于C中的多维数组,我已经看过几十个关于"我的代码有什么问题"的问题.出于某种原因,人们似乎无法理解这里发生的事情,所以我决定回答这个问题作为对其他人的参考:
如何在C中正确设置,访问和释放多维数组?
如果其他人有有用的建议,请随时发布!
评估typeof(Object[,][]).Name给出Object[][,]
同样,typeof(Object[][,]).Name给出Object[,][]
好像逗号正在无缘无故地移动.
是什么赋予了?
使用T[][][]语法定义多维数组很容易.但是,这会创建一个原始数组类型,它不适合现代C++.这就是我们std::array从C++ 11开始的原因.但是使用多维数组来定义多维数组的语法std::array非常混乱.例如,要定义三维int数组,您必须编写std::array<std::array<std::array<int, 5>, 5>, 5>.语法根本不可扩展.我要求解决这个问题.也许,使用C++提供的现有实用程序无法修复此问题.在这种情况下,我很高兴开发了一种自定义工具来简化语法.
自己找到了解决方案:
template <typename T, std::size_t n, std::size_t... ns>
struct multi_array {
using type = std::array<typename multi_array<T, ns...>::type, n>;
};
template <typename T, std::size_t n>
struct multi_array<T, n> {
using type = std::array<T, n>;
};
template <typename T, std::size_t... ns>
using multi_array_t = typename multi_array<T, ns...>::type;
Run Code Online (Sandbox Code Playgroud)
想知道是否可以进一步简化实施.
c++ arrays multidimensional-array template-meta-programming c++14
我需要检查多维数组中是否存在值.我在Stackoverflow和PHP.NET上找到了这个例子我喜欢它因为它是一个优雅而紧凑的解决方案,但我注意到一个奇怪的行为:
$userdb=Array
(
(0) => Array
(
(uid) => '100',
(name) => 'Sandra Shush',
(pic_square) => 'urlof100'
),
(1) => Array
(
(uid) => '5465',
(name) => 'Stefanie Mcmohn',
(pic_square) => 'urlof100'
),
(2) => Array
(
(uid) => '40489',
(name) => 'Michael',
(pic_square) => 'urlof40489'
)
);
if(array_search(100, array_column($userdb, 'uid'))) {
echo "FOUND";
}
Run Code Online (Sandbox Code Playgroud)
如果检查FIRST数组(Array [0])的任何值是否存在,则IF语句不返回任何值.它确实与其他数组的值一起使用.100首先尝试,然后尝试40489(或尝试使用"名称"或"pic_square").
我仔细阅读了这篇文章.我理解解释的规则,但我想知道在定义一个常量多维数组并使用给定类型的已知值直接初始化时,究竟是什么阻止编译器接受以下语法:
const int multi_arr1[][] = {{1,2,3}, {1,2,3}}; // why not?
const int multi_arr2[][3] = {{1,2,3}, {1,2,3}}; // OK
error: declaration of 'multi_arr1' as multidimensional array must have bounds
for all dimensions except the first
Run Code Online (Sandbox Code Playgroud)
什么阻止编译器向右看并意识到我们正在处理每个"子阵列"的3个元素,或者只有在程序员为每个子阵列传递例如不同数量的元素时才返回错误{1,2,3}, {1,2,3,4}?
例如,当处理1D char数组时,编译器可以查看右侧的字符串=,这是有效的:
const char str[] = "Str";
Run Code Online (Sandbox Code Playgroud)
我想了解发生了什么,以便编译器无法推断出数组维度并计算分配大小,因为现在我觉得编译器已经拥有了所需的所有信息.我在这里错过了什么?
我知道2d数组是数组的数组.要获得一行,你可以做:
rowArray = my2Darray[row]
Run Code Online (Sandbox Code Playgroud)
由于每行可以是不同的大小,我假设它不是为了从2D数组中获取列而构建的.这让我相信你必须做的事情如下:
for(int row = 0; row < numRows; row++)
{
colArray[row] = m2Darray[row][columnOfInterest];
}
Run Code Online (Sandbox Code Playgroud)
它是否正确?这是唯一的方法吗?
假设您有一个2D网格,网格上的每个点都有x个对象(x> = 0).我无法考虑干净的算法,因此当用户指定坐标时,算法会找到最近的坐标(包括指定的坐标)与其上的对象.
为简单起见,我们假设如果2个坐标距离相同,则返回第一个坐标(或者如果您的算法不能以这种方式工作,那么最后一个,无关紧要).
编辑:1的坐标必须是1向上,向下,向左或向右.对角线的坐标是2.
作为旁注,什么是算法的优秀,免费的在线参考?