Использование квадратных скобок для вывода элементов массива - PullRequest
1 голос
/ 04 августа 2020

Этот код создает одну переменную записи (r) и одну переменную кортежа (t), которые содержат несколько массивов, и выводит их на стандартный вывод:

const N = 5;

record Myrec {
    var a: [1..N] int = (for i in 1..N do i);
    var b: [1..N] int = (for i in 1..N do i);
    var c: [1..N] int = (for i in 1..N do i);
}

proc test() {
    var r: Myrec;
    var t = (r.a, r.b, r.c);
    writeln( "r = ", r );
    writeln( "t = ", t );
}

test();

Если я запускаю этот код, я получаю этот вывод:

r = (a = 1 2 3 4 5, b = 1 2 3 4 5, c = 1 2 3 4 5)
t = (1 2 3 4 5, 1 2 3 4 5, 1 2 3 4 5)

, но я чувствую, что вывод не очень читаем (особенно в случае t). Итак, мне интересно, есть ли способ распечатать такие переменные с квадратными скобками, например, как показано ниже?

t = ([1 2 3 4 5], [1 2 3 4 5], [1 2 3 4 5])

Я думаю, что этого можно достичь, используя writef() + строку формата + передачу каждое поле кортежа (или напишите для этой цели специальную c функцию), но было бы неплохо, если бы существовал какой-нибудь удобный способ достичь аналогичной цели ...

1 Ответ

1 голос
/ 06 августа 2020

Согласно документам FormattedIO , похоже, что строка формата %ht (или %jt) выполняет работу по добавлению [...] для элементов массива. Ниже приведен модифицированный пример кода:

record Myrec {
    var n = 100;
    var a = [1,2,3];
    var x = 1.23;
}

proc test() {
    var r: Myrec;
    var t = (r.a, r.a);

    writeln();
    writeln( "r = ", r );
    writef( "r = %ht\n", r );  // "h" -> Chapel style
    writef( "r = %jt\n", r );  // "j" -> JSON style

    writeln();
    writeln( "t = ", t );
    writef( "t = %ht\n", t );

    var arr2d: [1..2, 1..3] int = (for i in 1..6 do i);

    writeln();
    writeln( "arr2d =\n", arr2d );
    writef( "arr2d =\n%ht\n", arr2d );
}

test();

Вывод

r = (n = 100, a = 1 2 3, x = 1.23)
r = new Myrec(n = 100, a = [1, 2, 3], x = 1.230000e+00)
r = {"n":100, "a":[1, 2, 3], "x":1.230000e+00}

t = (1 2 3, 1 2 3)
t = ([1, 2, 3], [1, 2, 3])

arr2d =
1 2 3
4 5 6
arr2d =
[
 [1, 2, 3],
 [4, 5, 6]
]
...