私は2つの地図を持っています。 Map
にはどのようなキーが存在するかを調べる方法はありますが、他のキーには存在しません。 --
とMap.keys/1
を使用してある地図に存在し、他の地図には存在しないキーを見つける
1
A
答えて
3
は、これを実行する最も簡単な方法です:
# Suppose your two maps are:
map_a = %{a: 1, b: 2, c: 3, d: 4}
map_b = %{c: 3, d: 4, e: 5, f: 6}
# Get keys present in map_a but not in map_b
a_b_diff = Map.keys(map_a) -- Map.keys(map_b) # => [:a, :b]
# Get keys present in map_b but not in map_a
b_a_diff = Map.keys(map_b) -- Map.keys(map_a) # => [:e, :f]
3
--
は、大規模なリストのための非常に非効率的です。あなたはすでにマップを持っているので、を使ってO(log n)
の時間内にあるキーの存在を調べることができます。
map1 = for x <- Enum.take_random(1..10000, 5000), into: %{}, do: {x, x}
map2 = for x <- Enum.take_random(1..10000, 5000), into: %{}, do: {x, x}
{time, result1} = :timer.tc(fn ->
Map.keys(map1) -- Map.keys(map2)
end)
IO.puts "--: #{time}µs"
{time, result2} = :timer.tc(fn ->
for {k, _} <- map1, !Map.has_key?(map2, k), do: k
end)
IO.puts "for: #{time}µs"
IO.inspect result1 == result2
出力:
--: 113367µs
for: 739µs
true
iex(1)> map1 = %{a: 1, b: 2, d: 3, f: 4}
%{a: 1, b: 2, d: 3, f: 4}
iex(2)> map2 = %{b: 5, c: 6, f: 7, g: 8}
%{b: 5, c: 6, f: 7, g: 8}
iex(3)> for {k, _} <- map1, !Map.has_key?(map2, k), do: k
[:a, :d]
大きな地図で迅速なベンチマークはKernel.--/2
対巨大なパフォーマンスの違いを示しています。フィルター付きfor
シンプルなあなたが望む結果を得るために使用することができます
マップが小さい場合でも、--
はこれよりもやや短く読みやすくなり、十分に良いはずです。
関連する問題
- 1. ユーザーの所在地が地図上に表示されない
- 2. ゴランの地図に値が存在するか確認してください。
- 3. ナビゲーションドロワーで現在地が地図に表示されない
- 4. 他に存在しない図形を作成する
- 5. スパークRDD-地図と地図地図
- 6. タイプ(地図。地図)
- 7. シンクロナイズド地図は地図の下に考えてみましょ地図
- 8. 地図内の地図java
- 9. ネイティブマップボックスに反応する - Androidで他の地図にオーバーレイする地図
- 10. 地図上にユーザーの所在地を取得できないxcode 7.1
- 11. Android現在地を見つけるエラー
- 12. 地図上に別の地図を表示できないリスナーイベント
- 13. 太平洋の塗りつぶし地図の地図
- 14. 地図座標が現在の地域にあるか、現在の地域にないことをどのように知ることができますか?
- 15. JSFのあるジャクソンで地図を地図
- 16. ピン配置のある地理地図
- 17. プロフィールを作成して各ユーザーの地図に保存する
- 18. 地図でクロザールの地図をサブ
- 19. 地図の重複キー
- 20. CASEINSENSITIVE地図キーのJava
- 21. 地図要求はなし
- 22. 現在の位置のピンを地図上に表示する
- 23. 地図マーカーを中心にしない
- 24. インドの州の地図がGoogleの地図になります
- 25. 地図上の地図のポイント
- 26. ジェネリック:地図に
- 27. 地図上のプロット点R地図パッケージ
- 28. 大きな地図をメモリに保存する
- 29. アイテムを地図またはCassandraの行に保存する
- 30. 簡潔に地図を地図にどのように
ok。私は単にキーとマップのリストを持っていて、どのキーがマップに存在していないかをチェックしたいのですが、どうしたらいいですか? – Otoma
['Map.has_key?'](https://hexdocs.pm/elixir/Map.html#has_key?/2)などを使うことができます: 'keys - Map.keys(map)' – Sheharyar
' - '? – Otoma