web-dev-qa-db-ja.com

辞書でキーのリストを取得するにはどうすればよいですか?

私は仕事をしようとしたコードを手に入れませんでした。

値ではなくキーが必要です(まだ)。別の配列を使用すると、removeも使用するため、作業が多すぎることがわかりました。

135
List<string> keyList = new List<string>(this.yourDictionary.Keys);
269
Camal

.Keysを見ることができるはずです:

    Dictionary<string, int> data = new Dictionary<string, int>();
    data.Add("abc", 123);
    data.Add("def", 456);
    foreach (string key in data.Keys)
    {
        Console.WriteLine(key);
    }
66
Marc Gravell

すべてのキーのリストを取得するには

using System.Linq;
List<String> myKeys = myDict.Keys.ToList();

System.Linqは、.Net framework 3.5以降でサポートされています。 System.Linqの使用中に問題が発生した場合は、以下のリンクを参照してください

Visual StudioはSystem.Linqを認識しません

System.Linq名前空間

36
prem

Marc Gravellの答えはあなたに役立つはずです。 myDictionary.Keysは、ICollection<TKey>IEnumerable<TKey>およびそれらの非ジェネリックを実装するオブジェクトを返します。

値にアクセスすることを計画している場合は、次のように辞書をループできます(変更された例)。

Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("abc", 123);
data.Add("def", 456);

foreach (KeyValuePair<string, int> item in data)
{
    Console.WriteLine(item.Key + ": " + item.Value);
}
12
Thorarin

質問を理解するのは少し難しいですが、問題は、キーを反復処理するときに辞書から要素を削除しようとしていることだと推測しています。その場合、2番目の配列を使用する以外に選択肢はないと思います。

ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
  if (<your condition here>)
  {
    lDict.Remove(lKey);
  }
}

ArrayListの代わりに汎用リストと辞書を使用できる場合は、上記の方法でうまくいくはずです。

3
Dan

これらすべての複雑な答えは信じられません。キーのタイプがstringであると仮定します(怠け者の開発者の場合は 'var'を使用します):-

List<string> listOfKeys = theCollection.Keys.ToList();
2
Antony Booth

最もきちんとした方法は LINQ を使用することだと思います:

Dictionary<string, int> data = new Dictionary<string, int>();data.Select(x=>x.Key).ToList();

1
JakubW

またはこのように:

List< KeyValuePair< string, int > > theList =
    new List< KeyValuePair< string,int > >(this.yourDictionary);

for ( int i = 0; i < theList.Count; i++)
{ 
  // the key
  Console.WriteLine(theList[i].Key);
}
0
user176829

ハイブリッド辞書の場合、これを使用します。

List<string> keys = new List<string>(dictionary.Count);
keys.AddRange(dictionary.Keys.Cast<string>());
0
Kosmas