Превратите список в отдельный список и сопоставьте индексы - PullRequest
2 голосов
/ 25 марта 2019

У меня есть список объектов, и я хочу превратить его в отдельный список при сопоставлении всех индексов с новыми индексами.

Пример:

Список: ["a", "b", "a", "d"] ->["a", "b", "d"]

Карта:

{
  0: 0, //0th index of original list is now 0th index of distinct list
  1: 1,
  2: 0, //2nd index of original list is now 0th index of distinct list
  3: 2  //3rd index of original list is now 2th index of distinct list
} 

Есть ли простой способ сделать это с помощью одной строки или с помощью довольно простого решения в kotlin?

Ответы [ 2 ]

4 голосов
/ 25 марта 2019

Следующее выражение сделает это:

val p = listOf("a", "b", "a", "d").let {
  val set = it.distinct().mapIndexed { i, v -> v to i }.toMap()
  it.mapIndexed { i, v -> i to set.getValue(v) }
}.toMap()
1 голос
/ 26 марта 2019

Я думаю, что это решит проблему довольно аккуратно:

val orig = listOf("a", "b", "a", "c")

val positions = orig.distinct().let { uniques ->
    orig.withIndex().associate { (idx, e) -> idx to uniques.indexOf(e) }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...