Objective-C 中的 for 循环 - 原始数组

发布于 2024-07-14 22:25:16 字数 314 浏览 9 评论 0原文

int matrix[3][3] = {
      {1,2,3},
      {1,2,3},
      {1,2,3},
}

我怎样才能循环它?

基本上长度操作是我关心的。

for (int i=0; XXXXX; i++) {
  for (int j=0; XXXX; j++) {
      int value = matrix[i][j];
 }
}

编辑:是否有获取数组大小的动态方法? 像sizeof()之类的东西?

int matrix[3][3] = {
      {1,2,3},
      {1,2,3},
      {1,2,3},
}

How can I loop over it?

Basically the length operation is my concern.

for (int i=0; XXXXX; i++) {
  for (int j=0; XXXX; j++) {
      int value = matrix[i][j];
 }
}

EDIT: Is there a dynamic way of getting the array size? Something like sizeof()?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我ぃ本無心為│何有愛 2024-07-21 22:25:16

对于静态创建的数组类型,您可以使用 sizeof 运算符,例如

sizeof(myArray) / sizeof(myArray[0])

对于动态创建的数组(即通过指针引用),这将不起作用(sizeof 只会为您提供系统上指针的大小)。 在这种情况下,您需要常量或数组中的哨兵值。 使用哨兵,只需扫描每个轴,直到找到它的长度(这就是 C 字符串的工作原理,使用 \0)。

For statically created array types, you can use the sizeof operator, e.g.

sizeof(myArray) / sizeof(myArray[0])

For dynamically created arrays (i.e referened by pointer), this won't work (sizeof will just give you the size of a pointer on your system). In this case, you need either constants, or a sentinal value in your array. With a sentinal, just scan each axis until you find it for the length (this is how C strings work, using \0).

窝囊感情。 2024-07-21 22:25:16

在 C 中我会执行以下操作,尝试:

sizeof( matrix ) /sizeof( matrix[0] )         <- outer array
sizeof( matrix[0] )/ sizeof( matrix[0][0] )   <- inner array



linux ~ $ cat sizeof_test.c
#include <stdio.h>

int main( void )
{
        int matrix[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, };
        int matrix2[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, {1,2,3}, };
        int matrix3[][4] = { {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, };

        printf( "array (%d) - elements( %d )\n", sizeof( matrix ) /sizeof( matrix[0] ), sizeof( matrix[0] )/ sizeof( matrix[0][0] ));
        printf( "array (%d) - elements( %d )\n", sizeof( matrix2 ) /sizeof( matrix2[0] ), sizeof( matrix2[0] )/ sizeof( matrix2[0][0] ));
        printf( "array (%d) - elements( %d )\n", sizeof( matrix3 ) /sizeof( matrix3[0] ), sizeof( matrix3[0] )/ sizeof( matrix3[0][0] ));

        return 0;
}
linux ~ $ gcc sizeof_test.c -o sizeof_test
linux ~ $ ./sizeof_test
array (3) - elements( 3 )
array (4) - elements( 3 )
array (4) - elements( 4 )
linux ~ $

In C I'd do the following, try:

sizeof( matrix ) /sizeof( matrix[0] )         <- outer array
sizeof( matrix[0] )/ sizeof( matrix[0][0] )   <- inner array



linux ~ $ cat sizeof_test.c
#include <stdio.h>

int main( void )
{
        int matrix[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, };
        int matrix2[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, {1,2,3}, };
        int matrix3[][4] = { {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, };

        printf( "array (%d) - elements( %d )\n", sizeof( matrix ) /sizeof( matrix[0] ), sizeof( matrix[0] )/ sizeof( matrix[0][0] ));
        printf( "array (%d) - elements( %d )\n", sizeof( matrix2 ) /sizeof( matrix2[0] ), sizeof( matrix2[0] )/ sizeof( matrix2[0][0] ));
        printf( "array (%d) - elements( %d )\n", sizeof( matrix3 ) /sizeof( matrix3[0] ), sizeof( matrix3[0] )/ sizeof( matrix3[0][0] ));

        return 0;
}
linux ~ $ gcc sizeof_test.c -o sizeof_test
linux ~ $ ./sizeof_test
array (3) - elements( 3 )
array (4) - elements( 3 )
array (4) - elements( 4 )
linux ~ $
时间海 2024-07-21 22:25:16

您可以像在 C 中一样执行此操作:

int matrix[3][3] = { {1,2,3}, {1,2,3}, {1,2,3}, };

for(int i = 0; i < 3; i++)
{
    for(int j = 0; j < 3; j++)
    {
        int value = matrix[i][j];
    }
}

不过,我建议使用常量而不是神奇的 3。 将使一切更具可读性,尤其是 for 循环。

You can do this just as you would in C:

int matrix[3][3] = { {1,2,3}, {1,2,3}, {1,2,3}, };

for(int i = 0; i < 3; i++)
{
    for(int j = 0; j < 3; j++)
    {
        int value = matrix[i][j];
    }
}

Though, I recommend using a constant instead of magic 3's. Will make everything more readable, especially the for loop.

一枫情书 2024-07-21 22:25:16

顶层数组的长度是 3,每个子数组的长度是 3,所以这应该有效:

for( int i = 0; i < 3; ++i ) {
      for( int j = 0; j < 3; ++j ) {
           // do something here for each element
      }
 }

The length of the top level array is 3, the length of each sub array is 3, so this should work:

for( int i = 0; i < 3; ++i ) {
      for( int j = 0; j < 3; ++j ) {
           // do something here for each element
      }
 }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文