我有一个哈希,其中填充了未知数量的字符串键.每个键的值为零以启动.
我想迭代这个哈希并为除第一个之外的每个元素,使其值等于我在另一个哈希中的等价物加上此哈希中的先前值.所以在数学上类似于:
hash1:a = hash2:a;
hash1:b = hash2:b + hash1:a;
hash1:c = hash2:c + hash1:b;
hash1:d = hash2:d + hash1:c;
hash1:e = hash2:e + hash1:d;
...
Run Code Online (Sandbox Code Playgroud)
我甚至不确定我知道如何做第一个,因为我不知道价值或关键是什么.我打算先对它进行排序,但由于键可能是列表中的任何键,我无法指定首先是什么.我不知道如何根据键引用以前的值.这可能吗?
(我没有任何代码表明我害怕,我试过但我只是意识到这是非常错的哈哈)
抱歉,如果这看起来像另一个问题 - 有很多解决方案,我没有找到我正在寻找的东西,但我可能错过了它.如果标题不是最佳描述,也要道歉 - 不确定如何说出来.
我有五个'特征'作为字符串,例如:
$height $width $depth $length $colour
Run Code Online (Sandbox Code Playgroud)
我希望得到所有不同的独特组合,从5开始,然后下降到1,例如:
5: $height $width $depth $length $colour
4: $height $width $depth $length
4: $height $width $depth $colour
4: $height $width $length $colour
4: $height $depth $length $colour
4: $width $depth $length $colour
...
and so on
...
1: $height
1: $width
1: $depth
1: $length
1: $colour
Run Code Online (Sandbox Code Playgroud)
我不知道这是否有差别,但在代码中,我打算使用&&和!$string,例如:
4: $height && $width && $depth && $length && !$colour
4: $height && $width && …Run Code Online (Sandbox Code Playgroud) 我有这样的Perl代码:
$pre = $dbh->prepare("select distinct skills from people");
$pre->execute;
my @preList;
while (my $row = $pre->fetchrow_array()) {
push (@preList,$row);
}
print "Pre list: $_" foreach @preList;
Run Code Online (Sandbox Code Playgroud)
当我在sql中尝试完全相同的语句时,它可以很好地工作,但是当我运行这个程序时,它什么都没打印出来(暗示是空的@preList).我可能正在做一些非常愚蠢的事情,但看不到它.我之前使用过这种格式来获取数据,效果很好.谁能看到我做错了什么?
我有一些这样的陈述:
my $name = $criteria->{'name'} if $criteria->{'name'};
my $age = $criteria->{'age'} if $criteria->{'age'};
my $dob = $criteria->{'dob'} if $criteria->{'dob'};
.
.
.
# there are around 8 of these
Run Code Online (Sandbox Code Playgroud)
我想做类似的事情:
foreach (qw/name age dob .../) {
${$_} = $criteria->{$_} if $criteria->{$_};
}
Run Code Online (Sandbox Code Playgroud)
我确定我之前已经这样做了,但是当我尝试使用use strict它时发出错误.
有没有办法做到这一点?或者有更好的方法来做我想要的吗?我真的很懒,但如果有办法,那就很有趣了.
如果可以的话,以内存方式运行会更有效吗?我正在努力提高脚本的速度.
我在perl文件中有一个哈希(让我们称之为test2.pl),如下所示:
our %hash1;
my %hash2 = {
one => ($hash1{"zero1"}, $hash1{"one1"} ),
two => ($hash1{"one1"}, $hash1{"two1"} ),
three => ($hash1{"two1"}, $hash1{"three1"}),
four => ($hash1{"three1"}, $hash1{"six1"} ),
five => ($hash1{"six1"}, $hash1{"one2"} ),
six => ($hash1{"one2"}, $hash1{"two2"} ),
last => ($hash1{"two2"}, $hash1{"last1"} ),
};
Run Code Online (Sandbox Code Playgroud)
这得到6个Use of uninitialized value in anonymous hash ({}) at test2.pl line 7.错误(文件中的第7行对应于该my %hash2行,所有错误都表示第7行).
我只能假设这是因为%hash1在另一个调用此文件的文件(test1.pl)中定义.我认为使用our就足以定义它了.我是否必须初始化哈希中的所有变量才能使其工作?
(我正在使用括号,our因为我已经在那里声明了其他变量.)
我希望对字符串数组进行排序,以便字符串按以下顺序排列:
@set = ('oneM', 'twoM', 'threeM', 'sixM', 'oneY', 'twoY', 'oldest');
Run Code Online (Sandbox Code Playgroud)
你可能会注意到,这些代表时间段,所以oneM是第一个月,等等.我的问题是我想按时间段排序,但是对于字符串,我不能只使用'sort',所以我创建了这个哈希来表达字符串应该如何排序:
my %comparison = (
oneM => 1,
twoM => 2,
threeM => 3,
sixM => 6,
oneY => 12,
twoY => 24,
oldest => 25,
);
Run Code Online (Sandbox Code Playgroud)
我希望这会让我的生活更轻松,我可以做一些事情,比如:
foreach my $s (@set) {
foreach my $k (%comparison) {
if ($s eq $k) {
something something something
Run Code Online (Sandbox Code Playgroud)
我觉得这是一个漫长的做事方式,我不确定如果我找到相同的东西后我会如何实际排序......我想我有点想念自己的情节了所以任何帮助将不胜感激
根据要求,预期输出将如上所示在@set中显示.我应该已经提到@set中的值将是该集合的一部分,但不一定是所有这些值而不是相同的顺序.
我想将哈希的所有值相乘而不必调用特定元素.例如:I DO NOT想要做的$hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'},因为我不知道在哈希表元素做这个数.
我猜这里有一个简单而有效的功能,可能是使用each或者其他东西,但我找不到任何可以遵循的例子.有任何想法吗?
我有一个字符串'Basingstoke & Deane',我想检查'&'符号并剪切字符串(包括).
所以我的意见是: 'Basingstoke & Deane'
输出将是: 'Basingstoke '
我可以搜索'&'精细使用,$string =~ /&/并可以使用替换/删除它s/&//,但我有一个如何删除&和其后的所有字符的心理块.留下的额外空间无关紧要.
这是许多字符串中的一个,因此通用解决方案将是最佳的.如果以前曾经问过这个问题,我已经看到很多关于截断字符串的substr问题和搜索特定字符串的问题,等等,但是我没有找到什么.任何帮助赞赏.
perl ×8
hash ×4
key-value ×2
variables ×2
combinations ×1
loops ×1
mysql ×1
permutation ×1
regex ×1
sorting ×1