2016-04-28 10 views
0
def breadth_first_search(adj_matrix, source_index, end_index) 
    node_queue = [source_index] 
    puts "#{source_index} stored into queue \n" 

    loop do 
    curr_node = node_queue.pop 
    puts "#{curr_node} popped \n" 
    return false if curr_node == nil 
    return true if curr_node == end_index 

    children = (0..adj_matrix.length-1).to_a.select do |i| 
     adj_matrix[curr_node][i] == 1 

    end 

    puts "children: #{children}" 
    node_queue = children + node_queue 
    puts "node_queue: #{node_queue}" 
    end 
end 

私は概念的に理解できますが、実際の構文はわかりません。 children変数はループを持つ要素を格納する配列ですか?子変数配列内のこのコードスニペットは何を意味しますか?

答えて

2

変数childrenが列挙方法select

selectの結果に設定されているが、多くの場合、ブロックを取り、アレイ上に呼び出されるメソッドです。戻り値は、ブロックがtruthyオブジェクト(例えばないfalse、ないnil

(0..adj_matrix.length-1)は0からに変換さadj_matrixの長さに、範囲のオブジェクトであるが返された元の配列の値のみです([0, 1, 2, ...]もたらす)to_a介しアレイ

は、その配列のみにadj_matrix[curr_node][i] == 1値であることがselectによってフィルタリングされます。インデックス02のノードは、その後1

に等しい場合、その結果は次のようになり[0, 2]