Rubyで三次元ですが検証コードを書いてみました。
Ruby
1# frozen_string_literal: true
2
3def create_three1(l, m, n)
4 Array.new(l * m * n) do |i|
5 [i % l, i / l % m, i / l / m].join('-')
6 end
7end
8
9def get_three1(l, m, _n, list, x, y, z)
10 list[x + y * l + z * l * m]
11end
12
13def create_three3(l, m, n)
14 Array.new(n) do |i|
15 Array.new(m) do |j|
16 Array.new(l) do |k|
17 [k, j, i].join('-')
18 end
19 end
20 end
21end
22
23def get_three3(_l, _m, _n, list, x, y, z)
24 list[z][y][x]
25end
26
27if __FILE__ == $PROGRAM_NAME
28 size = 100
29 list1 = create_three1(size, size, size)
30 list3 = create_three3(size, size, size)
31 rs_list = 100000.times.each.map { [rand(size), rand(size), rand(size)] }
32
33 begin_time = Time.now
34 rs_list.each do |rs|
35 get_three1(size, size, size, list1, rs[0], rs[1], rs[2])
36 end
37 end_time = Time.now
38 puts "#{((end_time - begin_time) * 1000).to_i}ms"
39
40 begin_time = Time.now
41 rs_list.each do |rs|
42 get_three3(size, size, size, list3, rs[0], rs[1], rs[2])
43 end
44 end_time = Time.now
45 puts "#{((end_time - begin_time) * 1000).to_i}ms"
46end
1.5〜2倍ぐらい三次元の方が遅かったです。
退会済みユーザー
2016/08/25 13:24