Ruby: Как или установить переменную на 0 или, если она уже установлена, инкремент 1

Это точно, что я сделал для своего сервера, все, что необходимо сделать, установить Java, и идентификатор добавляют белый список для ssh сервера, таким образом, можно предотвратить грубые нападения принуждения, которые тяжелы на ресурсах серверов. И также я нашел, когда я запустил свой сервер со шпаклевки или любой другой ssh сессии, сервер остановится, как только я закрыл шпаклевку. Таким образом, я изучил, как запустить его и поддерживать его в рабочем состоянии 24/7.

Экранный-S minecraft java-Xincgc Xmx1G - банка minecraft_server.jar Для выхода из экрана делает Crtl + затем делают Crtl + d И добираться до экрана после того, как выход действительно экранирует-rx

Hope, это помогает Вам, любые другие вопросы посылают мне по электронной почте :)

7
задан Andrew Grimm 2 February 2012 в 07:13
поделиться

5 ответов

types = Hash.new(-1) # It feels like this should be 0, but to be
                     # equivalent to your example it needs to be -1
array.each do |c|
  types[c.type] += 1
end
15
ответ дан 6 December 2019 в 06:24
поделиться

|| = действительно помогает:

types = {}
array.each do |c|
    types[c.class] ||= 0
    types[c.class] += 1
end
3
ответ дан 6 December 2019 в 06:24
поделиться
array.each do |c|
  newarray[c.type] = 1 + (newarray[c.type] || -1)
end

В качестве альтернативы

array.each do |c|
  newarray[c.type] ||= -1
  newarray[c.type] += 1
end
4
ответ дан 6 December 2019 в 06:24
поделиться

Используйте метод Array # fetch , для которого вы можете указать значение по умолчанию, если индекс не существует:

array.each do |c|
  newarray[c.type] = newarray.fetch(c.type, -1) + 1
end
6
ответ дан 6 December 2019 в 06:24
поделиться

Ваша переменная newarray названа странно, поскольку в Ruby и большинстве других языков массивы индексируются целыми числами, а не случайными объектами, такими как Class . Скорее всего, это хэш .

Кроме того, вы должны использовать c.class вместо c.type , который устарел.

Наконец, поскольку вы создаете хэш , вы можете использовать inject следующим образом:

newarray = array.inject( {} ) do |h,c|
  h[c.class] = h.key?(c.class) ? h[c.class]+1 : 0
  h
end

Или, для однострочника:

newarray = array.inject( {} ) { |h,c| h[c.class] = h.key?(c.class) ? h[c.class]+1 : 0 ; h }

Как видите, это дает желаемые результаты:

irb(main):001:0> array = [1, {}, 42, [], Object.new(), [1, 2, 3]]
=> [1, {}, 42, [], #<Object:0x287030>, [1, 2, 3]]
irb(main):002:0> newarray = array.inject( {} ) { |h,c| h[c.class] = h.key?(c.class) ? h[c.class]+1 : 0 ; h }
=> {Object=>0, Hash=>0, Array=>1, Fixnum=>1}
0
ответ дан 6 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

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