Ruby 如何基于类似于';*的全局变量筛选数组。rb';
以下是我的数据结构:Ruby 如何基于类似于';*的全局变量筛选数组。rb';,ruby,Ruby,以下是我的数据结构: array = [ ['foo.rb', 'file', '2432'], ['bar/', 'directory', '2048'], ['bla.yml', 'file', '10'], ['ble.rb', 'file', '2156'] ] 现在我希望找到所有的.rb文件 因此,我的过滤器如下所示: filter = '*.rb' 有没有办法在数组变量上正确地过滤这些内容 结果应该是: array = [ ['foo.rb', 'file', '24
array = [
['foo.rb', 'file', '2432'],
['bar/', 'directory', '2048'],
['bla.yml', 'file', '10'],
['ble.rb', 'file', '2156']
]
现在我希望找到所有的.rb文件
因此,我的过滤器如下所示:
filter = '*.rb'
有没有办法在数组变量上正确地过滤这些内容
结果应该是:
array = [
['foo.rb', 'file', '2432'],
['ble.rb', 'file', '2156']
]
如果它是通过Dir.glob()实现的,这将很容易,但这是一个类似于
数据结构和我有点困惑,我怎么能轻松
对其进行筛选。您可以使用在任何字符串上执行shell样式的文件名全局搜索:
>> array.find_all { |finfo| finfo[0].end_with?(".rb") }
=> [["foo.rb", "file", "2432"], ["ble.rb", "file", "2156"]]
files = [ [ 'foo.rb', 'file', '2432' ],
[ 'bar/', 'directory', '2048' ],
[ 'bla.yml', 'file', '10' ],
[ 'ble.rb', 'file', '2156' ]
]
pattern = "*.rb"
files.select do |filename,|
File.fnmatch?(pattern, filename)
end
# => [ [ 'foo.rb', 'file', '2432' ],
# [ 'ble.rb', 'file', '2156' ] ]
注意do | filename,|
中的逗号。这只是一种语法糖,它丢弃数组中除第一个元素以外的所有元素,使块等效于:
files.select do |arr|
filename = arr[0]
File.fnmatch?(pattern, filename)
end
您也可以使用该方法
files.select do |arr|
filename = arr[0]
File.fnmatch?(pattern, filename)
end
array = [
['foo.rb', 'file', '2432'],
['bar/', 'directory', '2048'],
['bla.yml', 'file', '10'],
['ble.rb', 'file', '2156']
]
array.select { |a| File.extname(a.first) == '.rb' }
# => [["foo.rb", "file", "2432"], ["ble.rb", "file", "2156"]]