【发布时间】:2026-02-04 06:00:01
【问题描述】:
我正在尝试制作多维散列但收效甚微。
我已将我正在使用的脚本放在下面(注意:我正在使用 bio gem。)
#!/usr/bin/env ruby
require 'bio'
def make_hash(input_file)
input_read = Hash.new
biofastafile = Bio::FlatFile.open(Bio::FastaFormat, input_file)
biofastafile.each_entry do |entry|
#### If I uncomment the below line, it gives me 2D hash ###
#### input_read[entry.definition] = entry.aaseq
####
input_read.map { |maps|
id_start, id_end = entry.definition.split('-')
signalp, seq_end = entry.aaseq.split('-')
{
:id_start => id_start,
:id_end => id_end,
:signalp => signalp,
:seq_end => seq_end,
}
}
end
return input_read
end
hash = make_hash("./sample.txt")
puts hash
# puts hash[:id_start]
示例.txt
>isotig00003_f6_8 - Signal P Cleavage Site => 11:12
MMHLLCIVLLL-KWWLLL
>isotig00003_f6_9 - Signal P Cleavage Site => 10:11
MHLLCIVLLL-KWWLLL
>isotig00004_f6_8 - Signal P Cleavage Site => 11:12
MMHLLCIVLLL-KWWLLL
>isotig00004_f6_9 - Signal P Cleavage Site => 10:11
MHLLCIVLLL-KWWLLL
>isotig00009_f2_3 - Signal P Cleavage Site => 22:23
MLKCFSIIMGLILLLEIGGGCA-IYFYRAQIQAQFQKSLTDVTITDYRENADFQDLIDALQSGLSCCGVNSYEDWDNNIYFNCSGPANNPEALWCAFLLLYTGSSKRSSQHPVRLWSSFPRTTKYFPHKDLHHWLCGYVYNVD
>isotig00009_f3_9 - Signal P Cleavage Site => 16:17
MKTGIIIFISTVVVLP-ITLKPCGVPFSCCIPDQASGVANTQCGYGVRSPEQQNTFHTKIYTTGCADMFTMWINRYLYYIAGIAGVIVLVELFGFCFAHSLINDIKRQKARWAHR
我想要做的是将 sample.txt 拆分为条目(每 2 行)。然后我想将每个条目分成特定的部分,例如
>isotig00003_f6_8 - Signal P Cleavage Site => 11:12
MMHLLCIVLLL-KWWLLL
由
组成definition --> >isotig00003_f6_8 - Signal P Cleavage Site => 11:12
sequence (aaseq) --> MMHLLCIVLLL-KWWLLL
然后我想将定义拆分为:
:id_start --> >isotig00003_f6_8
:id_end --> Signal P Cleavage Site => 11:12
并将序列(aaseq)拆分为:
:signalp --> MMHLLCIVLLL
:seq_end --> KWWLLL
我想要的是能够在其他方法中使用每个特定的变量(:id_start、:id_end、:signalp、:seq_end)。
非常感谢大家的帮助
【问题讨论】:
-
我不太清楚你的哈希最后应该是什么样子。另外, input_read.map 应该完成什么? input_read 没有被填充到任何地方,所以它不会做任何事情,你也没有保存它的返回值。
-
“Use SLIM/HAML etc. in a Ruby script?”之前已经介绍了很多内容。请指出您之前的(大部分是重复的)问题,这样人们就不会不断重复,并用不同的解决方案重新回答。
-
抱歉重复,我以为我在问一个相关但不同的问题。几天来,我试图让上一个问题提供的答案与 bioruby gem fir 一起工作,但我无法让它工作。我也在网上寻找多维哈希,但我什么也没得到。下面的答案很有用。我会尝试用它来让脚本工作......
-
嘿,我更新了答案以使用
each_slice以更简洁的方式遍历数组。我知道有些东西可以满足我的需要:)
标签: ruby hash multidimensional-array hashmap bioinformatics