Какой тип вашего словаря?
Если это не универсальный IDictionary
, как предполагает ваш фрагмент кода, попробуйте следующее (В F # for
не вставляет неявно преобразования, поэтому вам нужно добавить Seq.cast<>
, чтобы получить типизированную коллекцию Вы можете легко работать с):
for entry in dict |> Seq.cast<DictionaryEntry> do
// use 'entry.Value' and 'entry.Key' here
Если вы используете универсальный IDictionary<'K, 'V>
, то вам не нужен вызов Seq.cast
(если у вас есть какой-либо контроль над библиотекой, это лучше, чем предыдущий вариант):
for entry in dict do
// use 'entry.Value' and 'entry.Key' here
Если вы используете неизменный тип F # Map<'K, 'V>
(который лучше всего использовать, если вы пишете функциональный код на F #), то вы можете использовать решение Павла или цикл for
вместе с KeyValue
активный шаблон, подобный этому:
for KeyValue(k, v) in dict do
// 'k' is the key, 'v' is the value
В обоих случаях вы можете использовать либо for
, либо различные iter
функции. Если вам нужно выполнить что-то с побочными эффектами, то я бы предпочел цикл for
(и это не первый ответ, где я упоминаю об этом :-)), потому что это языковая конструкция, предназначенная для этой цели. Для функциональной обработки вы можете использовать различные функции, такие как Seq.filter
и т.д ..