- PR -

VB.NETでの字句解析

投稿者投稿内容
むっく
会議室デビュー日: 2007/11/03
投稿数: 18
投稿日時: 2007-12-06 02:15
文字列の字句解析を行おうとしています。
たとえば、「xxx=XXX,yyy=YYY」というような文字列があった場合,
split等で切り分けて,連想配列に入れたいと思います。
上の例で言うと
キー:xxx  値:XXX
キー:yyy  値:YYY
というようなものです.
この際,例では2つの要素なので簡単ですが,たくさん要素があった場合,
このように連想配列に入れるには,一つ一つsplitして入れていくしかないのでしょうか?
ハッシュマップというもの(よくわかっていません..)を利用すると
簡単になると聞いたのですが,その方法や簡単になる理由等を教えていただきたいです.
よろしくお願いします.
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-12-06 03:00
引用:

この際,例では2つの要素なので簡単ですが,たくさん要素があった場合,
このように連想配列に入れるには,一つ一つsplitして入れていくしかないのでしょうか?



標準ライブラリだけで書けば、基本的にはそんなもんです。

',' で split して、その結果である配列の要素1つ1つをキーと値に分割して順に Dictionary に突っ込んでく感じでしょう。

あるいは、切り分けに正規表現を使ってもいいかもしれません。

ただし、キーと値の制約(キー名や値に , や = などの区切り記号が混入しうる場合)によっては切り分けのところから自分で書く破目になるかもしれません。

>ハッシュマップというもの(よくわかっていません..)を利用すると

.NET2.0 以降なら、Dictionary<T,V> 型のジェネリックを使った方がいいんじゃないすかね。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-12-06 07:21
> ハッシュマップというもの(よくわかっていません..)を利用すると

HashMapは連想配列の実装の一つです。
連想配列を実装するならHashMapを使えば簡単ですが、
今の話は連想配列にデータを入れる話ですから
関係ないです。

> .NET2.0 以降なら、Dictionary<T,V> 型のジェネリックを使った方がいいんじゃないすかね。

誤解する人がいるといけないので念のため。
Dictionary<T,V>もハッシュマップです。

[ メッセージ編集済み 編集者: れい 編集日時 2007-12-06 07:22 ]
むっく
会議室デビュー日: 2007/11/03
投稿数: 18
投稿日時: 2007-12-06 08:29
渋木さん,れいさん,書き込みありがとうございます.
やはり,一つ一つ文字列を区切って連想配列に入れようと思います.
Dictionaryについては,自分で勉強してみます.

れいさん:
HashMapについて,お手数でなければ,もう少し教えていただけませんでしょうか?
HashTable=連想配列だなと考えているのですが,
連想配列を実装するのがHashMapとありますよね.
この意味というか,原理というか,ご教授いただければと思います.
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-12-06 09:06
引用:

れいさん:
HashMapについて,お手数でなければ,もう少し教えていただけませんでしょうか?
HashTable=連想配列だなと考えているのですが,
連想配列を実装するのがHashMapとありますよね.
この意味というか,原理というか,ご教授いただければと思います.



ただの言葉の問題です。
正式に名称を決める機関もないので、慣習的に決まってるだけです。

Hashはオブジェクトを郡に分けたり識別したりするための手法のことです。

Hash値でオブジェクトをTableに振り分ける手法がHashTableです。

連想配列はKeyによってValueを得る仕組みのことで、
これを実装するにはいくつも方法があります。
Hashを使ったり、Trieを使ったり、普通に配列を使ったり。
データ構造によって速度が違います。

こういった「Keyに対してValueを得る」のは本来配列とはいえません。
なのに連想配列というのは変です。
なので、人によってはMapと言います。
.NetではDictionaryですが、JavaではMapです。

HashMapはその名のとおりHashを使ったMapで、
内部でHashTableを使っています。
普通はHashTable≒HashMapと言ってもよいのですが、
HashTableは連想配列を作る以外にも使い道があります。
ですので正確にはイコールではありません。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2007-12-06 09:16
VB.NETではありませんが、最近Javaの会議室でも同じような話題がありました。
言語は違いますが、考え方や流用できそうなところあると思います。参考までに。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=42329&forum=12

よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-12-06 09:29
引用:

れいさん:
HashMapについて,お手数でなければ,もう少し教えていただけませんでしょうか?
HashTable=連想配列だなと考えているのですが,
連想配列を実装するのがHashMapとありますよね.
この意味というか,原理というか,ご教授いただければと思います.



このスレで出てくる一般的な用語(.NET専用語でないという意味)としての3つの言葉
連想配列=ハッシュテーブル=ハッシュマップ
は同じ意味合いで使われているものであると思います。

で、れいさんの投稿では一般的な用語について書かれているのだと思います。
#そのときにHashMapとかHashTableとか英字で書かれると混乱の元ではないかと思います。

連想配列(ハッシュテーブル、ハッシュマップどれでもいいですが)と
呼ばれうるものの.NETにおける実装クラスの例として
System.Collections.HashtableやSystem.Collections.Generic.Dictionaryがあります。

HashMapという名前のクラスは.NETにはありませんが、
Javaにはこの名前のクラスもHashtableという名前のクラスもあり、
ほぼ同じ機能ですが、この2種は仕様が異なります。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-12-06 10:13
引用:

よねKENさんの書き込み (2007-12-06 09:29) より:
で、れいさんの投稿では一般的な用語について書かれているのだと思います。
#そのときにHashMapとかHashTableとか英字で書かれると混乱の元ではないかと思います。



えーと…
何と何を混乱する恐れがあるのでしょうか?

スキルアップ/キャリアアップ(JOB@IT)