Следовать логике будет проще и быстрее
// @Param:data:Array that is the source
// @Return : Array that have the duplicate entries
findDuplicates(data: Array<any>): Array<any> {
return Array.from(new Set(data)).filter((value) => data.indexOf(value) !== data.lastIndexOf(value));
}
Преимущества:
Описание логики:
Примечание: методы map () и filter () эффективны и быстрее.
Хотя верхний уровень из всех файлов выполняются в одном контексте, каждый файл имеет свой собственный контекст сценария для локальных переменных. Другими словами, каждый файл имеет свой собственный набор локальных переменных, к которым можно получить доступ в этом файле, но не в других файлах.
С другой стороны, константы (CodeWords), глобальные переменные ($ code_words) и методы (def code_words) ) будет доступен через файлы.
Некоторые решения:
CodeWords = {:real => "code"}
$code_words = {:real => "code"}
def code_words
{:real => "code"}
end
ОО-решение, определенно слишком сложное для этого случая:
# first file
class CodeWords
DEFAULT = {:real => "code"}
attr_reader :words
def initialize(words = nil)
@words = words || DEFAULT
end
end
# second file
print "Enter your ideas "
idea = gets
code_words = CodeWords.new
code_words.words.each do |real, code|
idea.gsub!(real, code)
end
#Save the gibberish to a new file
print "File encoded, please enter a name to save the file"
ideas_name = gets.strip
File::open( 'idea-' + ideas_name + '.txt', 'w' ) do |f|
f << idea
end
Я думаю, проблема может заключаться в том, что require выполняет код в другом контексте, поэтому переменная времени выполнения больше не доступна после require.
Вы можете попробовать сделать ее константой:
CodeWords = { :real => 'code' }
Это будет доступно везде .
Здесь есть некоторые сведения о переменных прицелах и т. Д.
Более простой способ - использовать функцию Marshal.dump для сохранения кодовых слов.
# Save to File
code_words = {
'starmonkeys' => 'Фил и Пит, эти колючие канцлеры Нового Рейха', 'catapult' => 'chucky go-go', 'firebomb' => 'Жить с обогревом', 'Nigeria' => "Химчистка Нью-Йорка и Джерри (с пончиками)", 'Надеть кабош' => 'Надеть кабельную коробку' }
# Serialize
f = File.open('codewords','w')
Marshal.dump(code_words, f)
f.close
Теперь в начале вашего файла вы должны поместить это:
# Load the Serialized Data
code_words = Marshal.load(File.open('codewords','r'))
Вот простой способ убедиться, что вы всегда можете включить файл, который находится в том же каталоге, что и ваше приложение, поместив его перед оператором require
$:.unshift File.dirname(__FILE__)
$: это глобальная переменная, представляющая " КЛАССА "