Как получить все значения словаря < TKey, TValue > как IList < TValue & gt ;?

sudo apt-get install php-mysql 

хорошо работал на ubuntu и php 7

36
задан mezoid 17 February 2009 в 07:01
поделиться

3 ответа

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

IDictionary<int, IList<MyClass>> dict;
var flattenList = dict.SelectMany( x => x.Value );

Это должно добиться цели ;) SelectMany, сглаживает результат, что означает, что каждый список связывается в одну длинную последовательность (IEnumerable '1).

50
ответ дан John Leidegren 17 February 2009 в 17:01
поделиться
  • 1
    Ну, я don' t думают, отображаясь к различным ценам, хорошая идея. Я ничего не нашел в документации Android вообще относительно i18n проблем с тарификацией. – janpio 23 February 2012 в 08:20

Вариация на предложение John's:

var flattenedValues = dict.Values.SelectMany(x => x);

при необходимости в них в списке можно, конечно, назвать ToList:

var flattenedList = dict.Values.SelectMany(x => x).ToList();
23
ответ дан Jon Skeet 17 February 2009 в 17:01
поделиться
  • 1
    That' s, что я имел в виду с " регион или язык пользователя походят на плохой indicator". это будет корректно во многих случаях, но платежная валюта не связывается с устройством, но в учетную запись Рынка (я думаю). Если я изменяю свой язык, я все еще плачу в евро потому что I' m из Германии и Google знает это. – janpio 23 February 2012 в 08:19

Values добирается ICollection содержащий значения Вашего словаря. Как подразумевается определением Вашего словаря, это может быть определено как ICollection<IList<MyClass>> набор. Таким образом, если Вы действительно хотите IList<IList<MyClass>>, используйте решение spacedog .

, Если то, что Вы действительно хотите, является плоским 'IList', затем нет никакого другого решения, чем цикличное выполнение через каждое значение:

IList<MyClass> l=new List<MyClass>();
foreach (IList<MyClass> v in myDictionary.Values)
    l.AddRange(v);

Примечание, что это столь чрезвычайно неэффективно, что необходимо думать снова об использовании словаря для того, чего Вы пытаетесь достигнуть.

0
ответ дан Community 17 February 2009 в 17:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: