私は仕事をしようとしたコードを手に入れませんでした。
値ではなくキーが必要です(まだ)。別の配列を使用すると、removeも使用するため、作業が多すぎることがわかりました。
List<string> keyList = new List<string>(this.yourDictionary.Keys);
.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);
}
すべてのキーのリストを取得するには
using System.Linq;
List<String> myKeys = myDict.Keys.ToList();
System.Linqは、.Net framework 3.5以降でサポートされています。 System.Linqの使用中に問題が発生した場合は、以下のリンクを参照してください
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);
}
質問を理解するのは少し難しいですが、問題は、キーを反復処理するときに辞書から要素を削除しようとしていることだと推測しています。その場合、2番目の配列を使用する以外に選択肢はないと思います。
ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
if (<your condition here>)
{
lDict.Remove(lKey);
}
}
ArrayListの代わりに汎用リストと辞書を使用できる場合は、上記の方法でうまくいくはずです。
これらすべての複雑な答えは信じられません。キーのタイプがstringであると仮定します(怠け者の開発者の場合は 'var'を使用します):-
List<string> listOfKeys = theCollection.Keys.ToList();
最もきちんとした方法は LINQ を使用することだと思います:
Dictionary<string, int> data = new Dictionary<string, int>();
data.Select(x=>x.Key).ToList();
またはこのように:
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);
}
ハイブリッド辞書の場合、これを使用します。
List<string> keys = new List<string>(dictionary.Count);
keys.AddRange(dictionary.Keys.Cast<string>());