根据另一个数组的所有元素搜索数组的元素
Searching an element of an array against all elements of another array
我创建了一个脚本,允许我将 CSV 导入为多维数组,运行 搜索数组的每一行,如果搜索字符串匹配一行中的任何元素,return将整行写入一个新数组,写成:
require 'csv'
array = CSV.read('CSVlist.csv') #=> [["Name1", "8675309"],["Name2", "5557891"], ["Name3", "5557890"]]
shifted_array = Array.new
results_array = Array.new
while array.empty? == false
shifted_array = array.shift
shifted_array.each do |f|
if f =~ /8675309/
shifted_array = shifted_array.join(",") #=> ["Name1,8675309"]
results_array.push(shifted_array)
end
end
end
puts results_array #=> ["Name1,8675309"]
以上操作正常。但是,我不想只搜索一个字符串(上面的 /8675309/
),而是想搜索整个数组和 return 另一个数组(导入的文本文件)中的任何元素。我已经创建了比较数组,但如何根据另一个数组(numbers_array
,如下)而不是字符串搜索主数组 (array
)?
require 'csv'
array = CSV.read('CSVlist.csv') #=> [["Name1", "8675309"],["Name2", "5557891"], ["Name3", "5557890"]]
shifted_array = Array.new
results_array = Array.new
numbers_array = File.readlines("list1.txt").map &:split #=> ["5551234", "5557890", "8675309"]
while array.empty? == false
shifted_array = array.shift
shifted_array.each do |f|
if f =~ ???? # want the search to compare f to any element in numbers_array
shifted_array = shifted_array.join(",")
results_array.push(shifted_array)
end
end
end
puts results_array #=> desired output is ["Name1,8675409", "Name3,5557890"]
您可以使用 .select
, .any?
, .include?
和
.map
,放在一起看起来像:
results_array = array.select{ |row|
row.any?{ |e| numbers_array.include? e }
}.map{ |row|
row.join(',')
}
此代码首先 选择 仅 array
的行 include any numbers_array
中的元素,然后 maps 每个元素都有一个 join
.
使用该语句,您的整个代码块可以缩短为:
require 'csv'
array = CSV.read('CSVlist.csv')
numbers_array = File.readlines('list1.txt').map(&:split)
results_array = array.select{ |row|
row.any?{ |e| numbers_array.include? e }
}.map{ |row|
row.join(',')
}
puts results_array
我创建了一个脚本,允许我将 CSV 导入为多维数组,运行 搜索数组的每一行,如果搜索字符串匹配一行中的任何元素,return将整行写入一个新数组,写成:
require 'csv'
array = CSV.read('CSVlist.csv') #=> [["Name1", "8675309"],["Name2", "5557891"], ["Name3", "5557890"]]
shifted_array = Array.new
results_array = Array.new
while array.empty? == false
shifted_array = array.shift
shifted_array.each do |f|
if f =~ /8675309/
shifted_array = shifted_array.join(",") #=> ["Name1,8675309"]
results_array.push(shifted_array)
end
end
end
puts results_array #=> ["Name1,8675309"]
以上操作正常。但是,我不想只搜索一个字符串(上面的 /8675309/
),而是想搜索整个数组和 return 另一个数组(导入的文本文件)中的任何元素。我已经创建了比较数组,但如何根据另一个数组(numbers_array
,如下)而不是字符串搜索主数组 (array
)?
require 'csv'
array = CSV.read('CSVlist.csv') #=> [["Name1", "8675309"],["Name2", "5557891"], ["Name3", "5557890"]]
shifted_array = Array.new
results_array = Array.new
numbers_array = File.readlines("list1.txt").map &:split #=> ["5551234", "5557890", "8675309"]
while array.empty? == false
shifted_array = array.shift
shifted_array.each do |f|
if f =~ ???? # want the search to compare f to any element in numbers_array
shifted_array = shifted_array.join(",")
results_array.push(shifted_array)
end
end
end
puts results_array #=> desired output is ["Name1,8675409", "Name3,5557890"]
您可以使用 .select
, .any?
, .include?
和
.map
,放在一起看起来像:
results_array = array.select{ |row|
row.any?{ |e| numbers_array.include? e }
}.map{ |row|
row.join(',')
}
此代码首先 选择 仅 array
的行 include any numbers_array
中的元素,然后 maps 每个元素都有一个 join
.
使用该语句,您的整个代码块可以缩短为:
require 'csv'
array = CSV.read('CSVlist.csv')
numbers_array = File.readlines('list1.txt').map(&:split)
results_array = array.select{ |row|
row.any?{ |e| numbers_array.include? e }
}.map{ |row|
row.join(',')
}
puts results_array