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()メソッドを活用すると便利です。
-
MongoDBコレクションの全キー(フィールド名)を取得する方法まとめ
この記事は2019年1月18日にObjectRocket.com/blogで公開された内容をもとにしています。 MongoDB®のコレクションに含まれるすべてのキーを把握することは、スキーマの検証、フィールド名のタイプミスのデバッグ、設定すべきでないフィールドの発見など、さまざまな場面で役立ちます。本記事では、MongoDBコレクション内の全キー名を取得する複数の方法を、状況別にわかりやすく解説します。 まず検討したい:ODMやマネージドサービスの活用 ObjectRocketをはじめとする多くのMongoDB-as-a-Service事業者は、ユーザーインターフェース(UI)上で簡単にキーを
-
MongoDBコレクション内の全キー名を取得する方法|MapReduce・Aggregation・シェルなど状況別に解説
スキーマの検証、フィールド名のタイプミスのデバッグ、設定されるべきではないフィールドの発見などを行うには、まずMongoDBコレクション内にどのようなキーが存在するのかを把握しておく必要があります。多くのMongoDB-as-a-Service事業者は、UI上で手軽にこれを実現できる機能を提供しています(ObjectRocketもそのひとつです)。また、経験豊富なMongoDBユーザーの多くは、JavaScript向けのMongooseやPython向けのMongoengineといったオブジェクトドキュメントマッパー(ODM)を導入しています。ODMを使えば、アプリケーション向けの一貫性のある