f# 元组 item1 的序列

f# Seq of tuple item1

我不明白为什么会出现以下错误:

> 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) 属性。我想把它变成一本字典。

显然,我遗漏了什么。任何人都可以帮助我了解我做错了什么以及如何改正吗?

F# 似乎没有像 C# 中那样从底层元组中显示 Item1 和 Item2 属性。我尝试了以下似乎没有错误的工作。

使用函数 fst 和 snd:

x|> Seq.map (fun x -> fst x, snd x) |> dict

使用模式匹配:

x|> Seq.map (function (key, value) -> (key, value)) |> dict

而且显然不使用 Seq.map 也能正常工作:

x |> dict