はじめに
ツリー構造になっているオブジェクトに対して、
指定したパスが存在するかどうか判定する処理を施す際になかなかいい処理が思い浮かばず…
何とか絞り出して、処理を実装することが出来ました…
ツリー構造とは
枝分かれになっているデータ構造のことを言います。
上の部分が「親」または「根」といい、
そこから枝分かれで生えているのが「子要素」になります。
それぞれの領域を「ノード」、それらを繋いでいるのを「エッジ」といいます。
そして、子要素の無いノード、要は末端のノードは「葉」「リーフノード」と呼ばれます。
ソース
def search_path(_module, path):
path_parts = path.split("/") # 検索するパスを'/'で分割して配列化
current_module = _module # 現在いる階層を定義
for part in path_parts: # 分割したパスを1階層ずつ見ていく
found = False # 発見フラグを初期化
for ch in current_module.children: # 各ノードの子要素は配列を想定
if ch.name == part: # 階層名と一致したら、
current_module = ch # current_moduleに発見した階層を代入
found = True # 発見フラグを更新
break
else:
if found: # 階層名が一致していなかったら、Falseに更新
found = False
if not found:
return False
return True
終わりに
本当は再帰関数を利用する手もあったかもしれませんが、
私自身理解が浅いため危ういと判断しやめました。
ですが、次回こういった処理に出くわした際には実装できるように
再帰関数についても理解を深めていきたいです。