Как я получаю доступ к элементу массива, сохраненному в моем хеше в Perl?

Мое очень простое и основное мнение об этом - то, что таблицы там для табличных данных - не для расположения одной вещи на вершине или рядом с другим элементом, потому что Вам, оказывается, нравится он являющийся там.

Так - если Вы хотите отобразить таблицу данных: сделайте так (с таблицей). Если Вы хотите расположить содержание на странице: используйте css.

5
задан Axeman 8 October 2010 в 21:15
поделиться

5 ответов

У вас есть несколько ошибок в вашей программе:

my @my_array = ("aa" , "bbb");
$my_hash{"Kunjan"} = \@my_array;
print $my_hash{"Kunjan"}[0];

Я внес три изменения:

  1. Добавил мой перед @my_array на первая строка
  2. Измените [...] на (...) в первой строке
  3. Добавьте \ перед @my_array во второй строке
3
ответ дан 18 December 2019 в 06:02
поделиться

Синтаксис вашего массива неверен. Вы создаете ссылку на анонимный список, а @my_array представляет собой одноэлементный список, содержащий эту ссылку.

Вы можете правильно работать со ссылкой, как скаляр:

$my_array = ["aa" , "bbb"];
$my_hash{"Kunjan"} = $my_array;

Или вы можете работать со списком в виде списка, создавая ссылку только при помещении ее в хэш:

@my_array = ("aa" , "bbb");
$my_hash{"Kunjan"} = \@my_array;
14
ответ дан 18 December 2019 в 06:02
поделиться

Другие уже хорошо объяснили, что к чему, но я хотел бы добавить, что (особенно если вы новичок в Perl), было бы здорово, если бы вы потратили немного времени и прочитали perldsc и perllol документы.

0
ответ дан 18 December 2019 в 06:02
поделиться

Если бы вы поместили это только в начало вашего скрипта:

use strict;
use warnings;

... вы бы получили несколько сообщений об ошибках, указывающих, что было не так:

Global symbol "@my_array" requires explicit package name at kunjan-array.pl line 8.
Global symbol "@my_array" requires explicit package name at kunjan-array.pl line 11.

Итак, сначала объявите массив с помощью my @my_array; , и тогда вы получите:

Can't use string ("1") as an ARRAY ref while "strict refs" in use at kunjan-array.pl line 14.
  • Вы создали ссылку на массив и попытались назначить ее массиву - см. perldoc perldata , чтобы узнать, как объявить массив
  • ] Вы попытались присвоить массив хешу (вы можете назначать только скаляры, например, ссылку на массив - см. perldoc perlref для получения дополнительной информации о ссылках)
  • Вам необходимо разыменовать элемент хеша, чтобы получить элемент массива, например $ my_hash {"Kunjan"} -> [0] - снова см. perldoc perlref , чтобы узнать, как разыменовать хэш-ссылку
10
ответ дан 18 December 2019 в 06:02
поделиться

Это зависит от языка.

Тексты C ++ часто предлагают второй формат будет работать с итераторами, которые можно сравнивать (! =) напрямую, но не с условием больше или меньше. Также предварительное приращение может быть быстрее, чем последующее приращение, поскольку нет необходимости в копии переменной для сравнения, однако оптимизаторы могут с этим справиться.

Для целых чисел работает любая форма. Обычная идиома для C - первая, а для C ++ - вторая.

Для C # и Java я бы использовал foreach, чтобы перебирать все вещи.

В C ++ также есть std :: существуют определенные параметры схемы, которые они не улавливают, например значения столбцов по умолчанию, что заставляет вас вручную изменять параметр. Это может привести к потере часов каждый раз, когда вы обновляете DBML, не осознавая или не запоминая, где вам нужно внести ручные настройки, и ваш код начинает давать сбой.

Чтобы избежать этого, можно написать модульный тест, который использует отражение для проверьте метаданные LINQ для этих (ручных) настроек. Если тест не проходит, выдается описательное сообщение об ошибке, инструктирующее пользователя внести правильные изменения в свойства столбца. Это не идеальное решение, и оно может быть неудобным, если у вас много ручных настроек, но оно может помочь избежать некоторых серьезных проблем для вас и вашей команды.

Вот пример nunit-теста, чтобы проверить, установлен ли столбец для автоматического создания из БД.

0
ответ дан 18 December 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: