2016-03-21 20 views
-2

の配列内の空の位置を削除します。すべての値のハッシュマップが含まれていますが、私の出力は(空の位置を多く含んでしまうファイルoutput.txtを書き込むには私は次のような方法作成したRubyの

def list_all_keys 
$hash_table 
keys=[] 
output_file = File.open("output.txt", "w") 
output_file.write("Hash Table: \n") 
for i in 0..$hash_table.length - 1 
    current_node = $hash_table[i] 
    puts current_node.val 
    while current_node.val != -1 
    keys.push("key:" + current_node.key.to_s + ", value:" + current_node.val.to_s + ". pos:" + current_node.pos.to_s) 
    current_node = current_node.next 
    end 
    puts "Hash:" + i.to_s + ", Entries:" + keys.to_s 
    output_file.write("Hash:" + i.to_s + ", Entries:" + keys.to_s + "\n") 
    keys = [] 
end 
output_file.close 
end 
end 

をwhileループのため、私は思う)。出力の

例:

Hash:3964, Entries:[] /// CAN THESE BE PREVENTED? /// 
Hash:3965, Entries:["key:quicker., value:1. pos:[3573]"] 
Hash:3966, Entries:["key:easily, value:2. pos:[5639, 10510]"] 
Hash:3967, Entries:["key:kept, value:6. pos:[1732, 1785, 3392, 5932, 7544, 9047]"] 
Hash:3968, Entries:[] 
Hash:3969, Entries:[] 

はこれを防ぐためにいくつかの方法はありますか?

+0

空のキーを出力しないだけですか?それでは、 'keys.emptyを除いて'を使用してください。 put /出力の後に – JLB

+0

@JLBファイルに書き込まれたくない場合は – anonn023432

+0

output_file.write( "ハッシュ:" + i.to_s + "、エントリ:" + keys.to_s + "\ n" )keys.emptyを除く? – JLB

答えて

0

右あなたのputs "Hash" ...行の前に、あなたはこれがループの次の繰り返しにスキップしますnext if keys.empty?;

を書くことができます。

ところで、配列の任意のnil要素を削除する場合は、flattenを使用できます。

I.e. [nil, 2, 3, nil ].flattenは等しくなります[2,3]

関連する問題