0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

指定したパスで経路を探索する

Posted at

はじめに

ツリー構造になっているオブジェクトに対して、
指定したパスが存在するかどうか判定する処理を施す際になかなかいい処理が思い浮かばず…
何とか絞り出して、処理を実装することが出来ました…

ツリー構造とは

枝分かれになっているデータ構造のことを言います。

上の部分が「親」または「根」といい、
そこから枝分かれで生えているのが「子要素」になります。

それぞれの領域を「ノード」、それらを繋いでいるのを「エッジ」といいます。

そして、子要素の無いノード、要は末端のノードは「葉」「リーフノード」と呼ばれます。

image.png

ソース

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

終わりに

本当は再帰関数を利用する手もあったかもしれませんが、
私自身理解が浅いため危ういと判断しやめました。

ですが、次回こういった処理に出くわした際には実装できるように
再帰関数についても理解を深めていきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?