问题描述
我只是从F#开始,我想遍历字典,获取键和值.
I'm just starting with F# and I want to iterate over a dictionary, getting the keys and values.
所以在C#中,我输入:
So in C#, I'd put:
IDictionary resultSet = test.GetResults;
foreach (DictionaryEntry de in resultSet)
{
Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
}
我似乎找不到在F#中执行此操作的方法(无论如何也无法编译).
I can't seem to find a way to do this in F# (not one that compiles anyway).
有人可以在F#中建议等效代码吗?
Could anybody please suggest the equivalent code in F#?
干杯
暗恋
推荐答案
您的字典的类型是什么?
What is the type of your dictionary?
如果您的代码段所建议的不是通用的IDictionary
,请尝试以下操作(在F#中,for
不会隐式地插入转换,因此您需要添加Seq.cast<>
以获得类型化的集合,您可以轻松地与之合作):
If it is non-generic IDictionary
as your code snippet suggests, then try the following (In F#, for
doesn't implicitly insert conversions, so you need to add Seq.cast<>
to get a typed collection that you can easily work with):
for entry in dict |> Seq.cast<DictionaryEntry> do
// use 'entry.Value' and 'entry.Key' here
如果您使用的是通用IDictionary<'K, 'V>
,则无需调用Seq.cast
(如果您对库有任何控制权,那么它会比上一个选项更好):
If you are using generic IDictionary<'K, 'V>
then you don't need the call to Seq.cast
(if you have any control over the library, this is better than the previous option):
for entry in dict do
// use 'entry.Value' and 'entry.Key' here
如果您使用的是不可变的F#Map<'K, 'V>
类型(如果您正在用F#编写功能代码,这是使用的最佳类型),则可以使用Pavel的解决方案,也可以将for
循环与像这样的KeyValue
活动模式:
If you're using immutable F# Map<'K, 'V>
type (which is the best type to use if you're writing functional code in F#) then you can use the solution by Pavel or you can use for
loop together with the KeyValue
active pattern like this:
for KeyValue(k, v) in dict do
// 'k' is the key, 'v' is the value
在两种情况下,您都可以使用for
或各种iter
功能.如果您需要执行某些具有副作用的操作,那么我更喜欢for
循环(这不是我提到此的第一个答案:-)),因为这是为此目的而设计的语言构造.对于功能处理,您可以使用各种功能,例如Seq.filter
等.
In both of the cases, you can use either for
or various iter
functions. If you need to perform something with side-effects then I would prefer for
loop (and this is not the first answer where I am mentioning this :-)), because this is a language construct designed for this purpose. For functional processing you can use various functions like Seq.filter
etc..
这篇关于在字典上进行F#迭代的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!