当前位置: 首页 > 面试题库 >

如何在bash中声明2D数组

宋昕
2023-03-14
问题内容

我想知道如何在bash中声明2D数组,然后初始化为0。

在C中看起来像这样:

int a[4][5] = {0};

以及如何为元素分配值?如在C中:

a[2][3] = 3;

问题答案:

您可以使用例如哈希来模拟它们,但需要注意前导零和许多其他事情。下一个演示有效,但远非最佳解决方案。

#!/bin/bash
declare -A matrix
num_rows=4
num_columns=5

for ((i=1;i<=num_rows;i++)) do
    for ((j=1;j<=num_columns;j++)) do
        matrix[$i,$j]=$RANDOM
    done
done

f1="%$((${#num_rows}+1))s"
f2=" %9s"

printf "$f1" ''
for ((i=1;i<=num_rows;i++)) do
    printf "$f2" $i
done
echo

for ((j=1;j<=num_columns;j++)) do
    printf "$f1" $j
    for ((i=1;i<=num_rows;i++)) do
        printf "$f2" ${matrix[$i,$j]}
    done
    echo
done

上面的示例创建了一个具有随机数的4x5矩阵,并将其打印后转置,示例结果

           1         2         3         4
 1     18006     31193     16110     23297
 2     26229     19869      1140     19837
 3      8192      2181     25512      2318
 4      3269     25516     18701      7977
 5     31775     17358      4468     30345

原理是:创建一个关联数组,其中索引是类似的字符串3,4。好处:

  • 可以用于任意维度的数组;)像:30,40,23维。
  • 语法类似于数组的“ C” ${matrix[2,3]}


 类似资料:
  • 问题内容: 在Scala中,我可以这样声明一个字节数组 这太冗长了。有没有更简单的方法来声明Byte数组,类似于Java的 请注意,由于String 中的,以下结果导致错误 问题答案: 我相信您能做的最短的是 您 必须 将和转换为字节,因为它们不是有效的字节文字,因为它们超出了有符号字节的范围([-128,127])。 请注意,Java也是如此,以下给出了编译错误: 您必须将192和168强制转换

  • 问题内容: 我想在Swift中存储一系列弱引用。数组本身不应该是一个弱引用-它的元素应该是。我认为可可对此提供了非类型安全的版本。 问题答案: 创建通用包装,如下所示: 将此类的实例添加到您的数组。 定义时,可以使用或。 另外,为了帮助获取数组内容,您可以按照以下方式进行操作: 上面的用法应替换为-但我不认为当前的Swift语言允许这样定义扩展。

  • 问题内容: 如果我在Swift中需要自定义类型,可以,该怎么办?(类似于闭包语法typedef) 问题答案: 使用关键字代替

  • 问题内容: 有以下代码: 显然,的调用以某种方式改变了类的属性和行为。 这是怎么发生的?如何在代码中使用这种方法? 示例代码是zope.interface模块的一部分。 问题答案: 详细的“会发生什么” 该函数检查框架堆栈并更改构造类的名称空间(python )。python语句中的所有内容都在该命名空间中执行,结果形成类主体。 该函数为类命名空间添加了额外的值,其中包含一些数据(已传递给该函数的

  • 我有以下代码: 但当我试着去看测试的内容时,我看到了这个 如果我试图看到什么是在任何项目的数组我得到一个错误: 有人能解释一下我做错了什么,正确的方法是什么吗? Visual Studio 2022, Blazor Webassup,.NET6.0 谢谢

  • 问题内容: 我想问一个关于Java的问题。我有一个用户定义的对象类,学生,它有2个数据成员,名称和ID。在另一个类中,我必须声明那个object [](例如)。但是,我不知道对象数组的大小。是否可以声明对象数组但不知道大小?谢谢。 问题答案: 用户。添加新元素时,它将自动扩展。以后,您可以根据需要将其转换为数组。 作为另一个选择(不确定您到底想要什么),您可以声明字段,而不必立即对其进行初始化。