WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:ハッシュ?内の統合

0:[投稿] 見習い未満 [2002/07/23 13:48 ][環境:WIN+IE UNIX系+Perl]

 データから複数ある、あいうえお,あいうえお,かきくけこ,かきくけこ
を、
あいうえお,かきくけこ
と同じ物は1つに纏めたいのですが、どのようにすれば良いのでしょうか?

Perl初心者で、質問が上手く出来ないですが、ご容赦ください。


1:[質問] 見習い未満 [2002/07/23 13:49 ]

汚してすいません、質問です。


2:[回答] xxx [2002/07/23 18:12 ]

@data=('あいうえお', 'あいうえお', 'かきくけこ', 'かきくけこ');

foreach(@data){
 $keys{$_}=$_;
# $keys{$_}++; # 出現回数を保存するならこちら
}
@result = keys(%keys);

@result にまとめたキーが入りますが、当然euc以外の漢字を
扱う場合はトラブル可能性あり


3:[回答] andi [2002/07/23 20:13 ]

重複したデータを除いた値が欲しいという認識で宜しいですか?
そう認識して次のような方法を考えました。

@data=('あいうえお', 'あいうえお', 'かきくけこ', 'かきくけこ','さしすせそ');
@result = grep{ !$keys{$_}++ } sort @data;
print @result;


4:[質問] 見習い未満 [2002/07/24 00:10 ]

xxxさま、andiさま ご回答ありがとうございます。
また質問内容の説明不足と下手ですいませんでした。

目的は、「掲示板に投稿者一覧を付けたい」です。
同一の$nameを纏めて、各々の$nameに<option>$name</option>のような並びをさせたいのですが、素人の浅知恵では思うように行きませんでした。


5:[質問] 見習い未満 [2002/07/24 00:39 ]

$nameに当たる部分は@messages[1]ですので、
この中に入っている同じ名前を一つにしたいのですが
難しいです。


6:[回答] やじうま1号 [2002/07/24 09:15 ]

そういうのであれば、

my(%hash,@names);
while(<DATA>){
 #<DATA>に結びついたファイルに<>で分けられてデータが保管されていると仮定
 my @messages = split(/<>/);
 if(not exists $hash{$_}){
   push @names, $_;
 }
}
これで@namesに重複しない名前が入るかなと思います。


7:[完了] 見習い未満 [2002/08/09 13:16 ]

お返事遅れましてすいません。
やじうま1号様に教えていただいたソースを参考にさせて頂きます。
ありがとうございました。


8:[完了] やじうま1号 [2002/08/09 14:23 ]

今見ると変なこと書いてましたね(汗)
if(not exists $hash{$_}){
となっていますが、
if(not exists $hash{$messages[1]}){
ですね。 訂正します(今更ながら)

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World