我對 Perl 很陌生,但這就是我想要做的,例如變數的值為 apple,banana,cat,dog,我需要將此值放入單獨的陣列中,例如
my $value = "apple","banana","cat","dog";
結果:
my @A = "apple";
my @B = "banana";
my @c = "cat";
my @D = "dog";
就這樣?我希望有人幫助我解決這個問題,非常感謝
uj5u.com熱心網友回復:
因為我需要使用陣列作為這些值的持有者按字母順序排列它。因此,如果腳本捕獲此字母,它將轉到該陣列,例如,如果腳本具有 yoyo 的值,它將轉到陣列@Y。就這樣,我希望你明白我的意思。謝謝你
看起來你想要做的是創建一個多級資料結構,所以你可以報告這樣的事情。
A: apple, astronaut
B: banana, buttons
C: cat, carnage
D: dog
P: perl
Y: yoyo, yawn
現在您通常不會為此使用 26 個不同的陣列。那是一種非常糟糕的風格,而且很難維護,因為你不能讓它充滿活力。
相反,您將使用多級資料結構。哈希參考非常適合。
$sorted_words_by_first_letter = {
'a' => [ 'apple', 'astronaut' ],
'b' => [ 'banana', 'buttons' ],
# ...
}
您必須迭代串列,查看每個單詞的第一個字母,然后將它們放入哈希參考中的正確鍵中。
my $sorted_words_by_first_letter;
my @words = qw/ banana apple astronaut yoyo buttons /;
foreach my $word (@words) {
# find the first character
$word =~ m/^(.)/;
# put it at the end of the array for the appropriate letter
push @{ $sorted_words_by_first_letter->{$1} }, $word;
}
您可以在perlref和perlreftut閱讀有關 Perl 中的參考和多級資料結構的更多資訊。您可以在perlre閱讀更多關于正則運算式的資訊。
如果您的輸入不是串列,而是字串,則需要split先輸入。
my @words = split /,/, "banana,apple,astronaut,yoyo,buttons";
為了向您展示為什么不應該為每個不同的字母使用特定變數,請考慮此代碼。我只是展示這個,所以你明白為什么這是一個壞主意。請不要這樣做。
my ( @A, @B, @C, @D, @E, @F, @G, @H, @I, @J, @K, @L, @M,
@N, @O, @P, @Q, @R, @S, @T, @U, @V, @W, @X, @Y, @Z );
my @words = qw/ banana apple astronaut yoyo buttons /;
foreach my $word (@words) {
# find the first character, assign to var
( my $letter ) = $word =~ m/^(.)/;
if ($letter =~ m/a/i) {
push @A, $letter;
} elsif ($letter =~ m/b/i) {
push @B, $letter;
} elsif ($letter =~ m/c/i) {
push @C, $letter;
} # ...
正如你所看到的,這會很快變得很長而且很笨拙,我們甚至還沒有討論過如何使用它。所以請不要這樣做。
uj5u.com熱心網友回復:
我認為你誤解了一些概念。
以美元符號開頭的變數$只能保存一個值。它們被稱為標量,它們不能是陣列。
my $value = "apple","banana","cat","dog";
的值$value將只是 be "apple"。該串列的其他部分將被丟棄。
您的變數@A、@B和都是陣列。當變數以 at作為其符號時,它就是一個陣列。@C@D@
my @A = "apple";
my @B = "banana";
my @c = "cat";
my @D = "dog";
這段代碼確實創建了四個陣列,每個陣列都有一個值,這很好。但這可能不是你被要求做的。
我認為您的意思是將單詞串列分配給一個陣列,然后將陣列的每個元素分配給一個單獨的標量變數。
# make an array of words
my @words = ( "apple","banana","cat","dog" );
# assign each one to a single variable.
my ($apple, $banana, $cat, $dog) = @words;
上面的代碼使用串列賦值和等號左側的變數串列=將陣列的元素放入這些變數中。
另一種方法是通過訪問陣列中的元素來單獨分配每個元素。為此,印記從 an@變為 a $。
my $apple = $words[0];
my $banana = $words[1];
my $cat = $words[2];
my $dog = $words[3];
不過,這些都與排序無關。
如果要對陣列進行排序,可以使用sort內置的. 您的串列已經按字母順序排序,所以這不是很令人興奮。
my @sorted = sort @values;
print "@sorted"; # apple banana cat dog
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/480998.html
標籤:perl
上一篇:Angular函式的回傳值
下一篇:你怎么匹配\'
