Chcę tylko kluczy, a nie wartości słownika.
Nie udało mi się jeszcze uzyskać żadnego kodu, aby to zrobić. Używanie innej tablicy okazało się zbyt pracochłonne, ponieważ używam również remove.
Jak uzyskać listę kluczy w słowniku?
Chcę tylko kluczy, a nie wartości słownika.
Nie udało mi się jeszcze uzyskać żadnego kodu, aby to zrobić. Używanie innej tablicy okazało się zbyt pracochłonne, ponieważ używam również remove.
Jak uzyskać listę kluczy w słowniku?
Odpowiedzi:
List<string> keyList = new List<string>(this.yourDictionary.Keys);
yourDictionary
jest częścią obiektu, wyprowadzoną z funkcji, czy też nazwą parametru.
Powinieneś być w stanie po prostu spojrzeć na .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);
}
Aby uzyskać listę wszystkich kluczy
using System.Linq;
List<String> myKeys = myDict.Keys.ToList();
System.Linq jest obsługiwany w .Net Framework 3.5 lub nowszym. Zobacz poniższe linki, jeśli napotkasz jakiekolwiek problemy w korzystaniu z System.Linq
using System.Linq;
muszę wiedzieć, które odpowiedzi zignorować. Przepraszam :)
.ToList()
wyrzucałem błąd, kiedy użyłem go tyle razy, więc przyszedłem tutaj, szukając odpowiedzi i zdałem sobie sprawę, że plik, w którym pracowałem, nie ma using System.Linq
:)
Dictionary<string, object>.KeyCollection' does not contain a definition for 'ToList'
Odpowiedź Marca Gravella powinna ci pasować. myDictionary.Keys
zwraca obiekt, który implementuje ICollection<TKey>
, IEnumerable<TKey>
i ich nieogólne odpowiedniki.
Chciałem tylko dodać, że jeśli planujesz również uzyskać dostęp do wartości, możesz zapętlić słownik w następujący sposób (zmodyfikowany przykład):
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);
}
Pytanie jest trochę trudne do zrozumienia, ale domyślam się, że problem polega na tym, że próbujesz usunąć elementy ze słownika podczas iteracji po kluczach. Myślę, że w takim przypadku nie masz innego wyjścia, jak tylko użyć drugiej tablicy.
ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
if (<your condition here>)
{
lDict.Remove(lKey);
}
}
Jeśli możesz użyć ogólnych list i słowników zamiast ArrayList, to zrobiłbym to, jednak powyższe powinno po prostu działać.
Nie mogę uwierzyć w te wszystkie zawiłe odpowiedzi. Zakładając, że klucz jest typu: string (lub użyj 'var', jeśli jesteś leniwym programistą): -
List<string> listOfKeys = theCollection.Keys.ToList();
using System.linq;
Lub tak:
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);
}