@kotlin_lang

Страница 634 из 982
Boris
12.04.2018
18:55:21
подумал, что нет смысла в фолде: fun <T> List<T>.removeItAndNext(item: T): List<T> { var idxRemove = -1 return filterIndexed { index, it -> when (item) { it -> { idxRemove = index false } else -> !(index > -1 && index == idxRemove) } } }

Жабра
12.04.2018
18:55:46
Google
Руслан
12.04.2018
18:56:34
вопросы по условию к автору задачи :)

Жабра
12.04.2018
18:56:37
в условии написано что есть элемент, а не индекс элемента
Но чтобы указать на нужный нам элемент - нужно передать индекс.

Boris
12.04.2018
18:56:40
что если два одинаковых элемента подряд?
Вроде должно норм отработать

Boris
12.04.2018
19:01:34
Кидаю 2 - удалятся 2 и 3, хотя я хочу 2 и 4.
Потому что удалить мне надо конкретный элемент по его значению, вообще в моем случае я даже знаю, что повторений не будет, но можно это конечно и учесть

Bogdan
12.04.2018
19:01:38
Жабра
12.04.2018
19:02:23
val oldList = listOf(0, 1, 2, 3, 4, 5) val list = oldList.toMutableList() if (list.size > index) list.removeAt(index) if (list.size > index) list.removeAt(index)

Quantum Harmonizer
12.04.2018
19:02:27
val idx = list.indexOf(item) return list.subList(0, idx) + list.subList(idx + 2, list.size)

Boris
12.04.2018
19:02:50
Boris
12.04.2018
19:03:14
а стримы (сиквенс) тут не поможет ?
так один проход же, что толку от сиквенса

Quantum Harmonizer
12.04.2018
19:03:40
моя первая реализация! ?
а что не устроило? (я так понял, что вы тут долго с этой проблемой :)

Google
Boris
12.04.2018
19:04:07
очень простая задача, а вот такого вот решения простого, да еще чтобы в один проход чот не видно

Quantum Harmonizer
12.04.2018
19:05:17
Все же вроде в один проход, не?

Boris
12.04.2018
19:06:09
только те что через фолд и последняя реализация через фильтрИндексед, остальные вроде нет

Жабра
12.04.2018
19:06:25
очень простая задача, а вот такого вот решения простого, да еще чтобы в один проход чот не видно
Решений простых очень много, а вы, как я вижу, хотите ещё и желательно в одну строчку. :)

Quantum Harmonizer
12.04.2018
19:06:28
а, removeAt два раза скопирует хвост

Bogdan
12.04.2018
19:08:24
а может заюзать линкед? фигня конечно, но можно найти элемент и есть доступ к следущему

Bogdan
12.04.2018
19:09:18
линкедлисты не нужны
очень редко всетаки нужны

зачем? О_о
находим елемент, берем предудущий, и в next вставляем сразу елемент из item.next.next, один проход, кода не много, но он че очень красивый

Bogdan
12.04.2018
19:12:21
И всё это ценой кучи узлов листа в хипе и постоянных cache miss'ов.
писали же что все равно на производительность

Руслан
12.04.2018
19:13:09
находим елемент, берем предудущий, и в next вставляем сразу елемент из item.next.next, один проход, кода не много, но он че очень красивый
Все хорошо, тут. Но потом ты захочешь проитерироваться по листу и вся эта микрооптимизация накроется

Quantum Harmonizer
12.04.2018
19:13:21
писали же что все равно на производительность
но это же сферическое решение в вакууме, на практике у нас нет доступа к узлам

Boris
12.04.2018
19:13:54
а мы хотели в один обход вроде

Quantum Harmonizer
12.04.2018
19:14:11
Google
Boris
12.04.2018
19:14:25
ну, в линкед лист запихать элементы

Bogdan
12.04.2018
19:14:33
так это же лишнее копирование
ты ничего не копируешь просто меняешь сылки

ну, в линкед лист запихать элементы
а новая колекция это не копирование?

Boris
12.04.2018
19:15:55
ты ничего не копируешь просто меняешь сылки
так изначально-то нету линкед-листа, так что в него надо скопировать

Bogdan
12.04.2018
19:16:05
и изменить

все

Boris
12.04.2018
19:16:19
а новая колекция это не копирование?
копирование, да, но если по ходу копирования еще и свои дела сделать, то всё равно один обход

Жабра
12.04.2018
19:16:30
так изначально-то нету линкед-листа, так что в него надо скопировать
val oldList = listOf(0, 1, 2, 3, 4, 5) val list = mutableListOf<Int>() oldList.forEachIndexed { index, item -> if (index != indexToRemove && index != indexToRemove - 1) { list.add(item) } }

:)

Bogdan
12.04.2018
19:16:41
ззадача сама по себе нек сложна, но решить красивым кодом, мне кажется почти нереально, апи не подходящий

Boris
12.04.2018
19:20:28
ну вот да, о том и речь

Жабра
12.04.2018
19:25:30
val idx = list.indexOf(item) return list.subList(0, idx) + list.subList(idx + 2, list.size)
Имхо: самая приятная реализация из представленных

Boris
12.04.2018
19:36:22
Имхо: самая приятная реализация из представленных
я её заменил на индексОф+фильтрИндексед в итоге

Boris
12.04.2018
19:37:50
потому что они менее подвержена ошибкам неверных индексов

Michael
12.04.2018
20:26:18
fun removeCurrentNext(l: List<Int>, v: Int): List<Int> { val s = l.size - 1 return l.filterIndexed({i, x -> !(l[i] ==v || (i<s && i>0 && l[i-1] == v))}) }

Quantum Harmonizer
12.04.2018
20:28:28
Выглядит как скала)

Michael
12.04.2018
20:28:51
простите, я только учусь

Google
Bogdan
12.04.2018
20:57:17
@Harmonizr презентация прекольная, думаю и сам доклад был неплохой

Sergey
12.04.2018
20:59:27
не успел)

Anton
12.04.2018
20:59:33
)

Boris
12.04.2018
21:34:35
А как названия функция которая делает зип с соседом?

DY
12.04.2018
21:45:02
zipWithNext?

Maxim
12.04.2018
21:47:30
А в котлине ассемблерные вставки делать можно?

Даниил
12.04.2018
21:49:34
я надеюсь ты про котлин нейтив

Maxim
12.04.2018
21:51:01
Я просто уснуть не могу, решил подумать над чем то глупым. Ищу единомышленников)

Даниил
12.04.2018
21:51:25
не ну просто если ты про котлин который под jvm то конечно нельзя

а на счёт котлин нейтив не знаю, вряд ли, во всяком случае ничего такого не гуглится

Boris
12.04.2018
21:52:45
Alexander
12.04.2018
22:46:33
Чем не ок только никто объяснить не может. :)
Конкретно моё мнение: 1. Впринципе if-else может делать тоже самое. 2. Тернарный оператор очень располагает к нечитаемому использованию: a ? b : c это обычно смотрится хорошо, наверное даже лучше, чем if (a) b else c a ? (b ? c : d) : e или какая-либо другая вложенность смотрится мягко говоря сложно. С помощью if-выражений можно расписать намного читабельнее. Итого - есть один простой кейс, в котором иногда тернарный оператор смотрится чуть-чуть лучше чем if-else (отмечу, что if-else смотрится неплохо при if-else выражениях, а не присваиваниях как в джаве). И есть куча кейсов, когда лучше не использовать тернарный оператор. И ради одного действительно небольшого улучшения нужно ли вводить целый оператор?

Konstantine
12.04.2018
22:47:46
Не хотят - пусть не добавляют, дело их. Просто забавно, что такой банальный кейс обошли стороной.

Alexander
12.04.2018
22:51:03
Время на добавления всякого однообразного добра вроде let, run и пр. есть, а добавить простой по своей сути оператор нет. Это смешно:)
let, run и тд - функции, не часть синтаксиса языка. Поэтому для них нормально иметь очень похожие кейсы использования. Тернарный оператор такой же как в джаве через функции не сделаешь, поэтому сравнение некорректное. Ну и его насколько помню не прямо проигнорировали, просто решили, что зачем нужны две идентичные конструкции.

Alexander
12.04.2018
22:53:03
Метадебат - разве такие чаты не нужны только для ведения таких дебатов и редких новостей/вопросов по языку? :)

Boris
13.04.2018
05:31:13
Устраивать дебаты по этому поводу смысла не вижу. Мое мнение - место ему в языке есть.
Просто у вопросика уже есть один синтаксический смысл, а хорошей альтернативы не придумали; учитывая наличие ифа -- норм

Mikhail
13.04.2018
06:05:20
Чем не ок только никто объяснить не может. :)
Java: if/else != ? :, потому что if/else не выражение. Kotlin: if/else == ? :, потому что if/else - выражение. Тем, кто жаждет тернарного оператора советую подумать, вдруг вам еще хочется альтернативный синтаксис для определения классов типа ©ClassName, или лямбды писать типа λx,y -> ... Можно еще для случаев когда нам нужно матчить просто инты ввести switch/case.

Google
Roman Q
13.04.2018
06:13:03
Таких сразу банить нужно

Anton
13.04.2018
06:13:53
Всем привет, есть такая идея - передавать метод в который должен передаваться результат (в java я бы просто написал интерфейс ) public interface OnSuccessListener<T> { void onSuccess(T item); } но в Котлине я так понимаю это не прокатит, я попробовал следующие

но это мне не помогло, как вообще правильно в таких ситуациях поступать на котлине?

не хочется наследовать массу Observable от базового ради того чтобы в них просто переопределять onSuccess для дергания нужного метода



Anton
13.04.2018
06:36:41
спасибо, вроде понял, сейчас опробую

Да, все отлично, оказалось то что я написал работает, просто передавал неправильно

и еще такой момент, получается не важно как записывать так val viewFun: T.() -> Unit или val viewFun: (T) -> Unit ??

Mi
13.04.2018
06:41:53
Anton
13.04.2018
06:43:20
в самой передаче да, а в приеме не важно?

Жабра
13.04.2018
06:43:40
и еще такой момент, получается не важно как записывать так val viewFun: T.() -> Unit или val viewFun: (T) -> Unit ??
В одном случае это функция, выполняющаяся рад T, а в другом функция, которая принимает T в качестве аргумента.

Anton
13.04.2018
06:44:13
т.е. в моем случае все таки надо (T) , просто удивился, что отрабатывают одинаково

Страница 634 из 982