C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のStringDictionaryで値のコレクションを取得する方法

C#のStringDictionaryから値のコレクションを取得するには、Keysプロパティで全キーを配列にコピーし、そのキーを使って各値へアクセスします。StringDictionaryは、キーと値がどちらも文字列型として扱われる特殊なディクショナリで、System.Collections.Specialized名前空間に属しています。

値のコレクションを取得する基本手順

  • Countプロパティで要素数を取得し、同じサイズのString型配列を用意します
  • Keys.CopyTo()メソッドで、すべてのキーを配列の先頭(インデックス0)からコピーします
  • コピーしたキーをインデクサ(strDict1[キー])に渡すことで、対応する値を順番に取得できます

例1:カテゴリデータの取得

まず、商品カテゴリを格納したStringDictionaryからキーと値のコレクションを取得する例を見てみましょう。

using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
   public static void Main(){
      StringDictionary strDict1 = new StringDictionary();
      strDict1.Add("S", "Home Appliances");
      strDict1.Add("T", "Smart Wearable Tech");
      strDict1.Add("U", "Electronics");
      strDict1.Add("V", "Toys");
      strDict1.Add("W", "Books");
      strDict1.Add("X", "Accessories");
      Console.WriteLine("StringDictionary elements...");
      foreach(DictionaryEntry d in strDict1){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("\nCollection of keys and values...");
      String[] keyArr = new String[strDict1.Count];
      strDict1.Keys.CopyTo(keyArr, 0);
      for (int i = 0; i < strDict1.Count; i++) {
         Console.WriteLine("Key "+(i+1)+" = "+keyArr[i]+", Value "+(i+1)+" = "+strDict1[keyArr[i]]);
      }
      Console.WriteLine("\nDoes StringDictionary has key B? "+strDict1.ContainsKey("B"));
   }
}

実行結果

StringDictionary elements...
x Accessories
s Home Appliances
t Smart Wearable Tech
u Electronics
v Toys
w Books
Collection of keys and values...
Key 1 = x, Value 1 = Accessories
Key 2 = s, Value 2 = Home Appliances
Key 3 = t, Value 3 = Smart Wearable Tech
Key 4 = u, Value 4 = Electronics
Key 5 = v, Value 5 = Toys
Key 6 = w, Value 6 = Books
Does StringDictionary has key B? False

この例では、6つのカテゴリをキー(S〜X)と値(カテゴリ名)のペアとして登録し、まずforeachループで全要素を表示しています。その後、Keys.CopyTo()でキー配列を作成し、forループでキーと値の組み合わせを出力しました。なお、StringDictionaryはキーを自動的に小文字に変換して保持するため、登録時の「S」は「s」として表示される点に注意してください。また、キー「B」は登録されていないため、ContainsKey()の結果はFalseとなります。

例2:名前データの取得

続いて、7つの名前を格納した別の例を確認しましょう。

using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
   public static void Main(){
      StringDictionary strDict1 = new StringDictionary();
      strDict1.Add("A", "John");
      strDict1.Add("B", "Andy");
      strDict1.Add("C", "Tim");
      strDict1.Add("D", "Ryan");
      strDict1.Add("E", "Kevin");
      strDict1.Add("F", "Katie");
      strDict1.Add("G", "Brad");
      Console.WriteLine("StringDictionary elements...");
      foreach(DictionaryEntry d in strDict1){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("\nCollection of keys and values...");
      String[] keyArr = new String[strDict1.Count];
      strDict1.Keys.CopyTo(keyArr, 0);
      for (int i = 0; i < strDict1.Count; i++) {
         Console.WriteLine("Key "+(i+1)+" = "+keyArr[i]+", Value "+(i+1)+" = "+strDict1[keyArr[i]]);
      }
      Console.WriteLine("\nDoes StringDictionary has key B? "+strDict1.ContainsKey("B"));
   }
}

実行結果

StringDictionary elements...
a John
b Andy
c Tim
d Ryan
e Kevin
f Katie
g Brad
Collection of keys and values...
Key 1 = a, Value 1 = John
Key 2 = b, Value 2 = Andy
Key 3 = c, Value 3 = Tim
Key 4 = d, Value 4 = Ryan
Key 5 = e, Value 5 = Kevin
Key 6 = f, Value 6 = Katie
Key 7 = g, Value 7 = Brad
Does StringDictionary has key B? True

今回はキー「B」が登録されているため、ContainsKey()はTrueを返します。このように、Keys.CopyTo()とインデクサを組み合わせることで、StringDictionary内の値のコレクションを簡単に取得できます。特定のキーが存在するかどうかを事前に確認したい場合は、ContainsKey()メソッドを活用すると便利です。

  1. MongoDBコレクションの全キー(フィールド名)を取得する方法まとめ

    この記事は2019年1月18日にObjectRocket.com/blogで公開された内容をもとにしています。 MongoDB®のコレクションに含まれるすべてのキーを把握することは、スキーマの検証、フィールド名のタイプミスのデバッグ、設定すべきでないフィールドの発見など、さまざまな場面で役立ちます。本記事では、MongoDBコレクション内の全キー名を取得する複数の方法を、状況別にわかりやすく解説します。 まず検討したい:ODMやマネージドサービスの活用 ObjectRocketをはじめとする多くのMongoDB-as-a-Service事業者は、ユーザーインターフェース(UI)上で簡単にキーを

  2. MongoDBコレクション内の全キー名を取得する方法|MapReduce・Aggregation・シェルなど状況別に解説

    スキーマの検証、フィールド名のタイプミスのデバッグ、設定されるべきではないフィールドの発見などを行うには、まずMongoDBコレクション内にどのようなキーが存在するのかを把握しておく必要があります。多くのMongoDB-as-a-Service事業者は、UI上で手軽にこれを実現できる機能を提供しています(ObjectRocketもそのひとつです)。また、経験豊富なMongoDBユーザーの多くは、JavaScript向けのMongooseやPython向けのMongoengineといったオブジェクトドキュメントマッパー(ODM)を導入しています。ODMを使えば、アプリケーション向けの一貫性のある