
Liudmila
06.06.2017
05:53:23
Привет! Mail.ru ищет спикеров по курсу вебинаров по Ruby и RoR. Удаленно, в свободном графике. ЗП 15000 руб. Пишите кому интересно l.karamysheva@corp.mail.ru

Alexander
06.06.2017
06:54:29
ээээ.... я ещё не проснулся или там только 3 нулика?
а, спикеров...
тьфу

Google

Alexander
06.06.2017
07:15:03

Amir
06.06.2017
07:16:31
render json: Hash[TpPleaReg::DETAL_TYPES.map { |t| [t[0], t[2]] if t[1] == type_id } ].to_json
что тут не так?
warning: wrong element type nil at 3 (expected array)
warning: ignoring wrong elements is deprecated, remove them explicitly
warning: this causes ArgumentError in the next release
warning: wrong element type nil at 4 (expected array)
warning: ignoring wrong elements is deprecated, remove them explicitly
warning: this causes ArgumentError in the next release

Alexander
06.06.2017
07:18:44
Вообще, английский знаешь?)


Alexander
06.06.2017
07:21:27

Amir
06.06.2017
07:22:55
Вообще, английский знаешь?)
Английский почти знаю
но не понимаю почему ему аткая констуркция кода не нравиться
у меня там тупо массив массивов с 3 элементами
и NIL я там никогда не сделаю
TYPES = [
[1, 1, 'qweqw'],
[2, 1, 'qweqw'],
[3, 2, 'qweqw'],
[4, 2, 'qweqw'],
]

Google

Alexander
06.06.2017
07:23:49

Amir
06.06.2017
07:24:23
|t| [t[0], t[2]] if t[1] == type_id

Alexander
06.06.2017
07:24:44

Amir
06.06.2017
07:24:54

Alexander
06.06.2017
07:25:13
И Enumerable, который он в себя включает
Это базовые знания, которые ты должен знать перед стартом проектов полностью, а не узнавать потом у людей по частям. Все тонкости сразу не запомнишь, но основы нужно

Amir
06.06.2017
07:27:30
ты это скажи моему работодателю :)
тут вообще все тупые

Igor
06.06.2017
07:28:33

Tim
06.06.2017
07:28:46
ты понимаешь, что ты и себя таким образом оскорбляешь?

Amir
06.06.2017
07:29:53

Vasiliy
06.06.2017
07:30:10
чувак может пришёл на жиэс писать, а его на ваш руби кинули

Amir
06.06.2017
07:30:46
типа того

Alexander
06.06.2017
07:40:48
типа того
В таком случае сначала Гугл, потом чат
Ну и в твоих силах было отказаться, если не хочешь ?♂

Amir
06.06.2017
07:41:32
нет смотрите
там у меня 3 колонок
я должен фильтровать и оставить только 1 и 3 колонку чтобы передать к HaSH

Alexander
06.06.2017
07:42:03
Метод правильно выбран, условие неправильно поставлено

Google

Amir
06.06.2017
07:42:59
сделал так
Hash[TpPleaReg::DETAL_TYPES.select { |t| t[1] == type_id }.map {|t| [t[0],t[2]]} ].to_json
мне просто не очень нравиться такой вариант
неужели нельзя при map сразу фильтровать? вроде можно, но рельц ругает

Alexander
06.06.2017
07:46:15
map преобразует и только, он нужен когда кол-во элементов не меняется
чтобы не делать двойной обход — можно корячить each_with_object
либо двойной обход) вполне читаемый
вместо Hash.[] можешь использовать .to_h, полагаю

trickster
06.06.2017
07:51:36
после вторых рубей

Alexander
06.06.2017
07:52:01

Dima
06.06.2017
08:20:31
+
И медленнее

Alexander
06.06.2017
08:21:20
И медленнее
относительно неудобства и небезопасности — это мелочь ?
но да

Alex
06.06.2017
08:37:48

Nikita
06.06.2017
09:37:27
:merge! только, или :update

Alex
06.06.2017
09:38:39

Nikita
06.06.2017
09:40:38
:merge будет создавать новый хэш на каждой итерации, а :update — нет, у тебя в качестве аккумулятора стоит пустой хэш в аргументах, он точно никем за пределами reduce еще не использовался, значит его можно безопасно мутировать

Alexander
06.06.2017
09:41:38

Alex
06.06.2017
09:42:05

Amir
06.06.2017
11:19:11
нашел простое изящное решение
TpPleaReg::DETAL_TYPES.map { |t| [t[0],t[2]] if t[1] == type_id }.compact.to_h
[1, nil, 3, nil, nil].compact
=> [1, 3]

Google

Sergey
06.06.2017
11:21:16
Лучше разделите map на select и map

Amir
06.06.2017
11:21:52
зачем

Alexey
06.06.2017
11:22:19
читабельнее

Amir
06.06.2017
11:22:25
Hash[TpPleaReg::DETAL_TYPES.select { |t| t[1] == type_id }.map {|t| [t[0],t[2]]} ].to_json
вот так чтоли
так не изящно

Alexey
06.06.2017
11:25:39
Hash[
TpPleaReg::DETAL_TYPES
.select { |t| t[1] == type_id }
.map { |t| [t[0], t[2]] }
].to_json

Anton
06.06.2017
11:25:41

Sergey
06.06.2017
11:26:42
.select { |_, foo, _| foo == type_id }
.map { |foo, _, bar| [foo, bar] }
.to_h

Admin
ERROR: S client not available

Anton
06.06.2017
11:27:11
Lucifer а скажи пожалуйста, сколько у тебя данных в DETAL_TYPES?
и если можешь дай начальные условия
вообще, я бы сделал вот так
hash = {}
TpPleaReg::DETAL_TY.each { |a, b, c| hash[a] = c if b == type_id }
hash
это был бы самый быстрый вариант

Sergey
06.06.2017
11:39:21
https://gist.github.com/droptheplot/705a271a775857a07df07ffa06d48b2f

Roman
06.06.2017
11:40:29

ojab
06.06.2017
11:44:20

Anton
06.06.2017
11:44:35

ojab
06.06.2017
11:44:36
ну и вообще, есть benchmark-ips. который лучше

Anton
06.06.2017
11:50:30

Google

Anton
06.06.2017
11:51:00

Sergey
06.06.2017
11:52:37
В итоге все равно получилось быстрее

Anton
06.06.2017
11:53:15

Alexander
06.06.2017
11:54:03

Sergey
06.06.2017
11:54:53

Anton
06.06.2017
12:01:00

Alexander
06.06.2017
12:01:25

Anton
06.06.2017
12:02:09
и то и то и зависит от того, сколько данных, где это будет и кто будет это поддерживать

Alexander
06.06.2017
12:02:58

Roman
06.06.2017
12:12:34
static VALUE
enum_each_with_object(VALUE obj, VALUE memo)
{
RETURN_SIZED_ENUMERATOR(obj, 1, &memo, enum_size);
rb_block_call(obj, id_each, 0, 0, each_with_object_i, memo);
return memo;
}
где тут лишние аллокации?

No
06.06.2017
12:16:21
допустим даже аллокации лишние и есть. стоит ли заморачиваться из-за этого заранее? я бы юзал #each_with_object ровно до того момента, пока это не просаживало производительность. если бы стало просаживать - уже решал бы что с этим делать

Roman
06.06.2017
12:22:10
не думаю, что хоть когда-нибудь в моем коде узкое место будет в нативном руби методе

Anton
06.06.2017
12:22:11
есть GC.stat который показывает тебе количесво аллоцированных объектов, так?
если быть точным, вот такой ключ GC.stat(:total_allocated_objects)