2015-06-11 2 views
-2

У меня есть словарь типа int, myclass. в myclass У меня есть следующие атрибуты: строка, int и строковый массив.Как получить значение словаря

Evrything отлично работает, когда я сохраняю данные в словаре. Но теперь я хочу посмотреть в словаре, если есть значение, в myclass, в строке строки позиции. И отфильтруйте их. Например, каждый объект, содержащийся в массиве «немецкий», должен быть отфильтрован. Есть ли возможность сделать это?

MyClass:

public class MYCLASS 
    { 
     public int ID 
     { 
      get; 
      set; 
     } 

     public string Specialty 
     { 
      get; 
      set; 
     } 

     public string[] Language 
     { 
      get; 
      set; 
     } 

public myclass(int id, string specialty, string[] language) 
     { 
      this.Language= language; 
      this.ID= id; 
      this.Specialty = specialty; 
     } 

} 

Мой словарь

Dictionary<int, myclass> objdict= new Dictionary<int, myclass>(); 
+6

Я не понимаю ... Почему каждый, кто обращается за помощью, не может поставить хороший вопрос здесь. Итак, где ваш код, что вы пробовали, уточните свой вопрос и попробуйте снова перефразировать ваш вопрос. Мой бог ... – ckruczek

+0

О, я вижу, что некоторые тексты отрезаны. im sry .. – saaami11

+0

Проводка кода будет приятной, потому что из ваших объяснений трудно следовать. – Gnqz

ответ

1

Использование LINQ - лучший вариант здесь. Если вы хотите получить доступ к своему классу в обычном цикле, это будет выглядеть так:

 foreach (KeyValuePair<string, MYCLASS> entry in MyDic) 
     { 
      // Value is in: entry.Value and key in: entry.Key 
      foreach(string language in ((MYCLASS)entry.Value).Language) 
      { 
       //Do sth with next language... 
      } 
     } 
+0

Nice Thank u Dude! Это сработало! Ур лучший мужчина!: D – saaami11

+0

Как добавить новую запись в словарь? Например, NewDictionary.Add (entry.Key, entry.Value); – voytek

+0

Да, я понял, я был в замешательстве, проглотил глупый вопрос: D – saaami11

2

Да, поиск по значениям словаря, а затем отфильтровать массив

var dict = new Dictionary<int, MYCLASS>(); 
var filteredPairs = from pair in dict 
        where !pair.Value.Language.Contains("German") 
        select pair; 
+0

Ницца, спасибо! Я постараюсь проверить его сейчас! – saaami11

+0

Я протестировал его сейчас, но если я отлаживаю, отфильтрованные пары пусты. – saaami11

+0

@ saaami11 Я добавил '!' В том месте, если немецкий не включил – Eric

1

Если я правильно понимаю ваш вопрос , если у вас есть класс:

public class Country 
{ 
    public string CountryName { get; set; } 
    public int CountryId { get; set; } 
    public string[] States { get; set; } 
} 

Если у вас есть словарь:

Dictionary<int, Country> dict = new Dictionary<int, Country>() 
{ 
    {1,new Country(){ CountryId=1,CountryName="Test1", States=new [] {"State1","State2","State3" }}}, 
    {2,new Country(){ CountryId=1,CountryName="Test2", States=new []{"State11","State21","State31" }}}, 
    {3,new Country(){ CountryId=1,CountryName="Test3", States=new []{"State12","State2","State31" }}}, 
    {4,new Country(){ CountryId=1,CountryName="Test4", States=new []{"Stae112","State21","State31" }}}, 
    }; 

Тогда можно фильтровать с помощью Where:

IEnumerable<KeyValuePair<int,Country>> enumerable= dict.Where(x=>x.Value.States.Contains("State21",StringComparer.OrdinalIgnoreCase)); 
+0

Спасибо за решение ур. Я пробовал это и в перечисляемом я не имею никаких элементов. – saaami11

+0

попробуйте регистр без учета регистра: «IEnumerable > enumerable = dict.Where (x => x.Value.States.Contains (" State21 ", StringComparer.OrdinalIgnoreCase)); ' –

+0

Хорошо, я тоже пробовал это, но все равно никаких предметов. Он работал с примером foreach voytek. Но спасибо за помощь! – saaami11

0

Вы можете использовать выражение LINQ, чтобы найти записи, соответствующие Вашему запросу:

var dictionary = new Dictionary<int, MYCLASS>(); 
var results = dictionary.Where(record => !record.Value.Language.Any("German")); 
+0

@sanderats U не может использовать Any для массивов? – saaami11

+0

Он работал в Linqpad, иначе конвертируется в массив, чтобы список с .ToList() – sanderarts

Смежные вопросы