Ruby, не могущий использовать, требует

Следовать логике будет проще и быстрее

// @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));
      }

Преимущества:

  1. Одиночная линия :-P
  2. Вся встроенная структура данных помогает повысить эффективность
  3. Быстрее

Описание логики:

  1. Преобразование в набор удалить все дубликаты
  2. Итерация по заданным значениям
  3. При каждой проверке заданного значения в исходном массиве выполняется условие «значения первого индекса не равны последнему индексу» ==> Затем выводится как дубликат, он является «уникальным»

Примечание: методы map () и filter () эффективны и быстрее.

5
задан Svante 29 June 2009 в 23:57
поделиться

4 ответа

Хотя верхний уровень из всех файлов выполняются в одном контексте, каждый файл имеет свой собственный контекст сценария для локальных переменных. Другими словами, каждый файл имеет свой собственный набор локальных переменных, к которым можно получить доступ в этом файле, но не в других файлах.

С другой стороны, константы (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
5
ответ дан 14 December 2019 в 08:58
поделиться

Я думаю, проблема может заключаться в том, что require выполняет код в другом контексте, поэтому переменная времени выполнения больше не доступна после require.

Вы можете попробовать сделать ее константой:

CodeWords = { :real => 'code' }

Это будет доступно везде .

Здесь есть некоторые сведения о переменных прицелах и т. Д.

1
ответ дан 14 December 2019 в 08:58
поделиться

Более простой способ - использовать функцию 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'))
0
ответ дан 14 December 2019 в 08:58
поделиться

Вот простой способ убедиться, что вы всегда можете включить файл, который находится в том же каталоге, что и ваше приложение, поместив его перед оператором require

$:.unshift File.dirname(__FILE__)

$: это глобальная переменная, представляющая " КЛАССА "

0
ответ дан 14 December 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: