2016-03-21 4 views
-2

Я создал следующий метод:Удалить пустые позиции в массиве в 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 

Для записи файла output.txt, который будет содержать хеш-карту всех значений, но мой выход включает в себя много пустых позиций (из-за цикла 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

Вы хотите просто не выводить пустые ключи? Тогда просто используйте 'if keys.empty?' после puts/output – JLB

+0

@JLB Я не хочу, чтобы они были записаны в файл, также – anonn023432

+0

output_file.write ("Hash:" + 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]

Смежные вопросы