😊

Vector{Vector{Int64}}に特定の値が含まれているか判定する

2024/02/14に公開2

概要

Vector{Vector{Int64}}に特定の値が含まれているか判定する方法を示す。

ソースコード

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

search_value = 1

if any(x -> any(x .== search_value), arr)
    println("Yes")
else
    println("No")
end

Discussion

antimon2antimon2

見た目少々長くなりますが↓以下のように記述するとパフォーマンスは良くなります。

any(v == search_value for x in arr for v in x)

ベンチマーク:

julia> using BenchmarkTools

julia> @btime let search_value=1, arr=$arr
              any(x -> any(x .== search_value), arr)
          end
  20.768 ns (2 allocations: 96 bytes)
true

julia> @btime let search_value=999, arr=$arr
              any(x -> any(x .== search_value), arr)
          end
  60.181 ns (6 allocations: 288 bytes)
false

julia> @btime let search_value=1, arr=$arr
              any(v == search_value for x in arr for v in x)
          end
  2.712 ns (0 allocations: 0 bytes)
true

julia> @btime let search_value=999, arr=$arr
              any(v == search_value for x in arr for v in x)
          end
  6.748 ns (0 allocations: 0 bytes)
false

参考までに。

原子軌道原子軌道

コメントありがとうございます。AtCoderでJuliaを使っているので、パフォーマンス関連のコメントもとても勉強になります。