- PR -

Hashtable のキー配列が欲しい

投稿者投稿内容
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2005-11-12 08:54
引用:

R・田中一郎さんの書き込み (2005-11-11 19:38) より:

こんな感じ.add("キー1", "値1")
こんな感じ.add("キー2", "値2")
こんな感じ.add("キー3", "値3")



引用:

表示する(こんな感じ.Item("キー1"))
表示する(こんな感じ.item("キー2"))
表示する(こんな感じ.item("キー3"))



この2つは hashtable で出来ますよね(というかそのまま)。

問題はこれで何をしたいのかが良く分からないのが問題なのですが…
引用:

for i = 0 to こんな感じ.count - 1
  表示する(こんな感じ.Item(i))
next


これで言いたいことは「常に順番が保証されたintのインデクサが欲しい」という意味でしょうか?「順番はどうでもいいのですべての要素にアクセスしたい」ということでしょうか?もし後者ならば、クラスなど作らずに hashtable でそのまま実現可能です。

文法は一応C#ですが、
コード:
Hashtable こんな感じ = new Hashtable();

こんな感じ.Add("キー1", "値1");
こんな感じ.Add("キー2", "値2");

表示する(こんな感じ["キー1"]);
表示する(こんな感じ["キー2"]);

foreach (string key in こんな感じ.Keys)
{
    表示する(こんな感じ[key]);
}



私が hashtable 使う時は、90%はこんな回し方ですが…。どうでしょ?
ほげた
ベテラン
会議室デビュー日: 2002/05/08
投稿数: 67
お住まい・勤務地: なごやん
投稿日時: 2005-11-13 03:04
値だけの列挙なら Values プロパティでも・・・

コード:
foreach (Hoge value in こんな感じ.Values)
{
   表示する(value);
}

NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-11-13 05:11
NAL-6295です。

System.Collections.SortedListクラスを利用すれば良いのではないでしょうか。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-11-13 13:41
まあ、きくちゃんさんが仰っているように、順番を保証したいんでしょうね、多分。
そうそう、NameValueCollection(NameValue系)はIDictionayじゃない点だけ注意です。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-11-14 09:39
>判りにくいんですが、要は Microsoft.VisualBasic.Collection みたいにキーでもインデックスでもコレクションの要素にアクセス出来るようにしたい、って事でしょうか?

そうです。
サンプルをありがとうございました。

今回は、たまたま業務システムに含まれる各機能名を管理する専用のクラスを作っていて、この中で必要になったのですが、似たような使い方は、今後もするだろうということで汎用的に使えるものはないかと質問しました。

ちなみに、こんな感じです。


--------------------------
社員マスター管理.題名 = "社員マスター"
社員マスター管理.機能グループ = "基準情報管理"
社員マスター管理.権限.読込 = False
社員マスター管理.権限.追加 = False
社員マスター管理.権限.更新 = False
社員マスター管理.権限.削除 = False
社員マスター管理.フラグ位置 = 5

取引先マスター管理.題名 = "取引先マスター"
社員マスター管理.機能グループ = "基準情報管理"
取引先マスター管理.権限.読込 = False
取引先マスター管理.権限.追加 = False



(中略)



'コレクション生成
機能コレクション as 機能コレクションクラス = new 機能コレクションクラス()
機能コレクション.追加(社員マスター管理)
機能コレクション.追加(取引先マスター管理)

'グループ単位のメニューとドロップダウンメニューの生成
機能コレクション.メニューの追加(メインフォーム)

--------------------------
上記のような感じで、業務システムの機能のメニューを生成する際に、コレクションに追加した順番通りでなければならず、また、必要時に機能名から簡単に各種権限がひける必要があった訳です。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-11-14 09:55
間違えました。
--------------------------
社員マスター管理.題名 = "社員マスター"
社員マスター管理.機能グループ = "基準情報管理"
社員マスター管理.権限.読込 = False
社員マスター管理.権限.追加 = False
社員マスター管理.権限.更新 = False
社員マスター管理.権限.削除 = False
社員マスター管理.フラグ位置 = 5

取引先マスター管理.題名 = "取引先マスター"
取引先マスター管理.機能グループ = "基準情報管理"
取引先マスター管理.権限.読込 = False
取引先マスター管理.権限.追加 = False



(中略)



'コレクション生成
機能コレクション as 機能コレクションクラス = new 機能コレクションクラス()
機能コレクション.追加(社員マスター管理)
機能コレクション.追加(取引先マスター管理)

'グループ単位のメニューとドロップダウンメニューの生成
機能コレクション.メニューの追加(メインフォーム)

--------------------------
メニューとして、次のようなものが欲しいのです。

基準情報管理
→社員マスター管理
→取引先マスター管理

以下のように順番が変わると困るわけです。

基準情報管理
→取引先マスター管理
→社員マスター管理

同時に、権限の取得や変更を行う際には、
if (機能コレクション.Item(社員マスター).権限.追加) then
  追加処理()
end if
として使いたいわけです。

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