Elixir:在列表映射中找到最小长度列表的键

Tho*_*wne 1 elixir

在 Elixir 的列表映射中查找与最小长度列表关联的键的有效方法是什么。假设我有:

z = %{a: [1, 2, 3], b: [4, 5], c: [6, 7, 8, 9]}
Run Code Online (Sandbox Code Playgroud)

我知道我能做到:

Enum.map z, fn {k, v} -> length(v) end
Run Code Online (Sandbox Code Playgroud)

这会给我:

[3, 2, 4]
Run Code Online (Sandbox Code Playgroud)

但我真正需要的只是答案,即与最小值 2 相关的键,当然是:b。

我将大约每秒在列表的动态映射上运行它,所以我希望它尽可能高效。

Pat*_*ity 5

除非绝对必要,否则我更喜欢简单性而不是性能,所以如果性能不太重要的话,我会这样做:

\n\n
map\n|> Enum.min_by(fn {_k, v} -> length(v) end)\n|> elem(0)\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加到 @Dogbert 的基准测试表明,平均速度慢了约 1.5 倍。我的机器上的 90\xc2\xb5s/iteration。这仍然有足够的空间来每秒运行它。

\n