Size: a a a

2019 October 16

ВС

Виталий Сердюк in Kotlin Start
Andrew Mikhaylov
А как ты собрался массив с дырками делать?
я предполажил что for или while в {} можно заюзать и каждая итерация будет возвращаться.
источник

ВС

Виталий Сердюк in Kotlin Start
хотя да, id все равно не изменить (
источник

AL

Alexander Levin in Kotlin Start
Виталий Сердюк
а другой способ создать  Array<T> есть ?
Давай поймём для начала результат.

Если у тебя каждый 16-й результат должен быть null, то можно с помощью исходной конструкции так и написать:
if (it % 16 == 0) null else ...

Если у тебя должен пропускаться каждый 16-й, я бы предложил сначала создать что-то с нефиксированным размером (тот же лист), а затем превратить в массив (если он конечно нужен):
(0 until 16 * height).mapNotNull {
       if (it % 16 == 0) null
       else {
           (it * it).toString() //simplified example
       }
   }.toTypedArray()



P.S. но если вне контекста ответы - emptyArray, arrayOf, Array<Type>(size) { //init }, превращение из коллекции (toTypedArray)
источник

ВС

Виталий Сердюк in Kotlin Start
Alexander Levin
Давай поймём для начала результат.

Если у тебя каждый 16-й результат должен быть null, то можно с помощью исходной конструкции так и написать:
if (it % 16 == 0) null else ...

Если у тебя должен пропускаться каждый 16-й, я бы предложил сначала создать что-то с нефиксированным размером (тот же лист), а затем превратить в массив (если он конечно нужен):
(0 until 16 * height).mapNotNull {
       if (it % 16 == 0) null
       else {
           (it * it).toString() //simplified example
       }
   }.toTypedArray()



P.S. но если вне контекста ответы - emptyArray, arrayOf, Array<Type>(size) { //init }, превращение из коллекции (toTypedArray)
второе.... сейчас попробую, спасибо
источник

ВС

Виталий Сердюк in Kotlin Start
Alexander Levin
Давай поймём для начала результат.

Если у тебя каждый 16-й результат должен быть null, то можно с помощью исходной конструкции так и написать:
if (it % 16 == 0) null else ...

Если у тебя должен пропускаться каждый 16-й, я бы предложил сначала создать что-то с нефиксированным размером (тот же лист), а затем превратить в массив (если он конечно нужен):
(0 until 16 * height).mapNotNull {
       if (it % 16 == 0) null
       else {
           (it * it).toString() //simplified example
       }
   }.toTypedArray()



P.S. но если вне контекста ответы - emptyArray, arrayOf, Array<Type>(size) { //init }, превращение из коллекции (toTypedArray)
вариант второй, но опять же не нужен ни объект ни null.
навреное создать сначало как есть а потом создать новый но без каждого 16го ....
источник

AL

Alexander Levin in Kotlin Start
Виталий Сердюк
вариант второй, но опять же не нужен ни объект ни null.
навреное создать сначало как есть а потом создать новый но без каждого 16го ....
null'ов не будет во второй опции, они все пропустятся из-за mapNotNull
источник

ВС

Виталий Сердюк in Kotlin Start
во блин
источник

ВС

Виталий Сердюк in Kotlin Start
Alexander Levin
null'ов не будет во второй опции, они все пропустятся из-за mapNotNull
Пасиб
источник

AL

Alexander Levin in Kotlin Start
Kirill
можно как-то это упростить?
val value :String = CarImage.removeOther(str
               .map { CarImage.Translit(Character.toUpperCase(it)) }
               .joinToString(""))
               .map { CarImage.Translit(Character.toUpperCase(it)) }
               .joinToString("")
смущает   .joinToString(""))
но .map {  возвращает List<Char> и пока других способов не нашел
Да, выглядит что в стандартной либе только так (нету готового map, который бы сразу в String заталкивал)

Всё, что могу предложить:

1. Если такое встречается у вас часто, то можно вынести в функцию
fun String.mapToString(transform: (Char) -> Char): String = map(transform).joinToString("")

2. Просто судя по названию - действительно ли после remove надо повторно трансформировать символы строки? :)
источник

K

Kirill in Kotlin Start
Alexander Levin
Да, выглядит что в стандартной либе только так (нету готового map, который бы сразу в String заталкивал)

Всё, что могу предложить:

1. Если такое встречается у вас часто, то можно вынести в функцию
fun String.mapToString(transform: (Char) -> Char): String = map(transform).joinToString("")

2. Просто судя по названию - действительно ли после remove надо повторно трансформировать символы строки? :)
сейчасвыясняю)) меня тоже это заинтересовало))
источник

BV

Boris Vanin in Kotlin Start
Alexander Levin
Да, выглядит что в стандартной либе только так (нету готового map, который бы сразу в String заталкивал)

Всё, что могу предложить:

1. Если такое встречается у вас часто, то можно вынести в функцию
fun String.mapToString(transform: (Char) -> Char): String = map(transform).joinToString("")

2. Просто судя по названию - действительно ли после remove надо повторно трансформировать символы строки? :)
joinToString последним параметром принимает трансформер
источник

AL

Alexander Levin in Kotlin Start
Boris Vanin
joinToString последним параметром принимает трансформер
Но joinToString нету у String, так что наверное это тут не поможет :)
источник

BV

Boris Vanin in Kotlin Start
Alexander Levin
Но joinToString нету у String, так что наверное это тут не поможет :)
Зато есть у его чаров 🤷‍♂
источник

AL

Alexander Levin in Kotlin Start
Boris Vanin
Зато есть у его чаров 🤷‍♂
Пока не уловил мысль, как сократить цепочку из двух вызовов до одного, ибо joinToString есть у Iterable и массивов, а строка не является сама по себе ни тем, ни другим.

Т.е. если после Translit выдаётся строка, то действительно это будет как toCharArray().joinToString("", transform = transform), но вроде не выглядит, что в чём-то выиграли :)
источник

BV

Boris Vanin in Kotlin Start
Alexander Levin
Пока не уловил мысль, как сократить цепочку из двух вызовов до одного, ибо joinToString есть у Iterable и массивов, а строка не является сама по себе ни тем, ни другим.

Т.е. если после Translit выдаётся строка, то действительно это будет как toCharArray().joinToString("", transform = transform), но вроде не выглядит, что в чём-то выиграли :)
Ну, это без отдельной функции использовать
источник

AL

Alexander Levin in Kotlin Start
Boris Vanin
Ну, это без отдельной функции использовать
А выигрыш в чём?
Сомнительная конструкция вроде никуда не ушла, операций две, промежуточное представление осталось (toCharArray копировать будет), букв больше :)
источник

BV

Boris Vanin in Kotlin Start
Зато по смыслу очевидно 🤷‍♂ но конечно вкусовщина в итоге, нет смысла спорить
источник

AL

Alexander Levin in Kotlin Start
Boris Vanin
Зато по смыслу очевидно 🤷‍♂ но конечно вкусовщина в итоге, нет смысла спорить
Да смысл в обоих очевиден, просто выглядят оба плохо :)
Но да, вкусовщина.
источник
2019 October 17

K

Kirill in Kotlin Start
Подскажите как можно из  Map<String, List<String>>  вывести ключ по его индексу?
пока нашел только:
.keys?.forEachIndexed { index, s -> if (index == i)
источник

AN

Alexander Nozik in Kotlin Start
Kirill
Подскажите как можно из  Map<String, List<String>>  вывести ключ по его индексу?
пока нашел только:
.keys?.forEachIndexed { index, s -> if (index == i)
Что такое ключ по его индексу?
источник