我不明白为什么我会收到以下错误:
> let x = "ABCDAACCECFG"|>Seq.sort|>Seq.groupBy (fun x->x);;
val x : seq<char * seq<char>>
> x;;
val it : seq<char * seq<char>> =
seq
[('A', seq ['A'; 'A'; 'A']); ('B', seq ['B']);
('C', seq ['C'; 'C'; 'C'; 'C']); ('D', seq ['D']); ...]
> (x|> Seq.head).GetType();;
val it : System.Type =
System.Tuple`2[System.Char,System.Collections.Generic.IEnumerable`1[System.Char]]
{Assembly = mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;
AssemblyQualifiedName = "System.Tuple`2[[System.Char, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Collections.Generic.IEnumerable`1[[System.Char, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
...
DeclaredProperties = [|Char Item1;
System.Collections.Generic.IEnumerable`1[System.Char] Item2;
Int32 System.ITuple.Size|];
...;}
> x|> Seq.map (fun x -> x.Item1, x.Item2)|>dict;;
x|> Seq.map (fun x -> x.Item1, x.Item2)|>dict;;
------------------------^^^^^
stdin(123,25): error FS0039: The field, constructor or member 'Item1' is not defined.
在我看来,x是一个元组序列,其中每个元组都有Item1(Char)和Item2(seq Char)属性。我想把它变成字典。
显然,我错过了一些东西。任何人都可以帮助我理解我做错了什么以及如何做对吗?答案 0 :(得分:2)
F#似乎没有C#中的底层元组中的Item1和Item2属性。我尝试了以下看似无误的工作。
使用函数fst和snd:
Dataset<Row> ds1 = ds.toDF("key","value");
ds1.groupBy(col("key")).sum("value").show();
使用模式匹配:
x|> Seq.map (fun x -> fst x, snd x) |> dict
显然没有使用Seq.map也可以:
x|> Seq.map (function (key, value) -> (key, value)) |> dict