Есть много способов, которыми вы можете представить нужную вам матрицу генов.Лучший способ будет зависеть от того, что вы хотите сделать с матрицей.Хотите сравнить, какие штаммы присутствуют в разных генах?Или сравнить, какие гены имеют данный штамм?Вы просто хотите узнать, имеет ли данный ген данный штамм?
Одним простым способом будет Hash
с ключами Set
s:
require 'set'
h = Hash.new { |h,k| h[k] = Set.new }
# assuming you already have the data in an array of arrays...
data.each do |gene,strain|
h[gene] << strain
end
* 1007.* Если вы хотите только напечатать матрицу на экране, вот небольшой сценарий для этого:
require 'set'
genes, strains = Set.new, Set.new
h = Hash.new { |h,k| h[k] = Set.new }
# again assuming you already have the data in an array of arrays
data.each { |g,s| h[g] << s; genes << g; strains << s }
genes, strains = genes.sort, strains.sort
FIELD_WIDTH = 5
BLANK = " "*FIELD_WIDTH
X = "X" + (" " * (FIELD_WIDTH - 1))
def print_fixed_width(str)
str = str[0,FIELD_WIDTH]
print str
print " "*(FIELD_WIDTH-str.length)
end
# now print the matrix
print BLANK
strains.each { |s| print_fixed_width(s) }
puts
genes.each do |g|
print_fixed_width(g)
strains.each { |s| h[g].include?(s) ? print X : print BLANK }
puts
end
Пожалуйста, опубликуйте более подробную информацию о том, что вы хотите сделать с матрицей, и я предоставлюболее подходящий вариант при необходимости.