children 变量数组中的这段代码是什么意思?
What does this snippet of code in the children variable array mean?
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 变量是一个存储元素的数组,带有循环吗?
正在将变量 children
设置为可枚举方法 select
的结果
select
是一种经常在数组上调用的方法,它需要一个块。 return 值只是原始数组的值,其中块 return 是一个 truthy
对象(例如,不是 false
,不是 nil
)
(0..adj_matrix.length-1)
是范围对象,从0到adj_matrix
的长度,通过to_a
转为数组(得到[0, 1, 2, ...]
)
然后该数组被 select
过滤为仅包含 adj_matrix[curr_node][i] == 1
的值。因此,如果索引 0
和 2
处的节点等于 1
那么结果就是[0, 2]
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 变量是一个存储元素的数组,带有循环吗?
正在将变量 children
设置为可枚举方法 select
select
是一种经常在数组上调用的方法,它需要一个块。 return 值只是原始数组的值,其中块 return 是一个 truthy
对象(例如,不是 false
,不是 nil
)
(0..adj_matrix.length-1)
是范围对象,从0到adj_matrix
的长度,通过to_a
转为数组(得到[0, 1, 2, ...]
)
然后该数组被 select
过滤为仅包含 adj_matrix[curr_node][i] == 1
的值。因此,如果索引 0
和 2
处的节点等于 1
那么结果就是[0, 2]