OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

連想配列とforeach

  • 困ってます
  • 質問No.199391
  • 閲覧数220
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 76% (26/34)

連想配列 %hogeにおいて、.name の名前が最後に付く配列の値を取り出したいと思い、下記のようにしました。
foreach ($hoge{/.*\.name$/}) {
 print "$_\n";
}
としてみましたが期待した出力がされませんでした。こういう描き方って出来ないんでしょうか?それともどこか間違ってますか?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル9

ベストアンサー率 53% (52/98)

$_ = "right.name";
print /.*\.name$/;
や、
$_ = "chigau.namae";
print /.*\.name$/;

の結果を見てみると分かりますが、この正規表現は、そのままで用いると変数 $_ に代入された値のマッチ結果になります。

foreach (keys %hoge) { # ハッシュのキーを一つずつ $_ に代入
 if (/.*\.name$/) {
  print "$hoge{$_}\n";
 }
}

のように、一旦$_ に代入する形式にすれば、お望みのことは可能だと思います。
お礼コメント
yatokesa

お礼率 76% (26/34)

回る数を減らそうと画策しましたが、配列の数分だけ回らないとだめと言うことですね。
ありがとうございました。
投稿日時 - 2002-01-16 15:29:09
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.2
レベル12

ベストアンサー率 75% (398/526)

ハッシュ(連想配列)のキーに正規表現を書くことはできません。 やるなら、次のようにします。   foreach (keys %hoge) {     print $hoge{$_} if /\.name$/;   } あるいは、   foreach (grep /\.name$/, keys %hoge) {     print "$hoge{$_}\n";   } ...続きを読む
ハッシュ(連想配列)のキーに正規表現を書くことはできません。
やるなら、次のようにします。
  foreach (keys %hoge) {
    print $hoge{$_} if /\.name$/;
  }
あるいは、
  foreach (grep /\.name$/, keys %hoge) {
    print "$hoge{$_}\n";
  }
もしくは、
  foreach (map $hoge{$_}, grep /\.name$/, keys %hoge) {
    print "$_\n";
  }
お礼コメント
yatokesa

お礼率 76% (26/34)

>ハッシュ(連想配列)のキーに正規表現を書くことはできません。
そうですか。出来ると嬉しいこともあるので是非対応して欲しいところです。その分オーバーヘッドが大きくなってしまっては元も子もないですが。
色々書き方があるものですね。勉強になります。
#といっても後半の2つはほとんど意味不明です^^;)。勉強しておきます。
ありがとうございました。
投稿日時 - 2002-01-16 15:34:05


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ