1

配列の最大深度がわかっている配列を完全にフラット化したい場合、常にその最大深度を引数として渡す方がパフォーマンスの面で優れていArray#flattenますか? 例えば、以下の場合、後者よりも前者の方が良いでしょうか?

[[:foo], [:bar], [:baz], ...].flatten(1)

[[:foo], [:bar], [:baz], ...].flatten
4

1 に答える 1

4

レベルを設定するかどうかに関係なく、要素が配列であるかどうかのチェックが行われるため、MRI ではありません。基本的にこれを行います(疑似Ruby、元のCが必要な場合はここから始まります

array.each do |value|
  if !value.is_array? || current_depth >= max_depth
    result << value
  else
    current_depth += 1
    recurse ...
  end
end

実際の実装は明示的に再帰的ではなく、is_array?メソッドもありませんが、要点はわかります。

お持ち帰りのメッセージは、ユースケースは常に!value.is_array?条件に一致し、渡した引数を使用しないため、渡しても何も得られないということです。

于 2013-01-22T23:49:31.550 に答える