Сортировка 3-значного номера против 4-значного номера - PullRequest
0 голосов
/ 16 мая 2019

Ранее я сортировал уникальный идентификатор, состоящий из двух букв, за которыми следовали три цифры.Этот уникальный идентификатор используется для группировки записей в секционном представлении таблицы.

Например, [un101, un098, un100, un099, un999] с использованием приведенного ниже кода работало отлично.

self.figuresByLetter = Dictionary(grouping: self.figures, by: { String($0.number[2])}).sorted(by: {$0.0 < $1.0})

И привело к [(ключ: "0", значение: un098, un099), (ключ: «1», значение: un100, un101), (ключ: «9», значение: un999)]

Когда число записей превысило 1000, я добавил ведущий ноль кпредыдущие записи.Я попытался обновить код до:

self.figuresByLetter = Dictionary(grouping: self.figures, by: { String($0.number[3])}).sorted(by: {$0.0 < $1.0})

Теперь результат равен [(ключ: "0", значение: un0098, un0099, un1000, un1001), (ключ: "1", значение: un0100,un0101), (клавиша: «9», значение: un0999)]

Что можно сделать, чтобы записи были в правильном порядке?

ОБНОВЛЕНИЕ: Я нашел более простой способвыполнить именно то, что я искал.

 self.figuresByLetter = Dictionary(grouping: self.figures, by: { String($0.number.prefix(4))}).sorted(by: {$0.0 < $1.0})

1 Ответ

0 голосов
/ 16 мая 2019

Если «две буквы одинаковы для каждой записи» и если всегда есть четыре цифры, то просто сортируйте:

let input = ["un0098", "un0099", "un1000", "un1001", "un1002", "un0100", "un0101"]
let output = input.sorted()
output // ["un0098", "un0099", "un0100", "un0101", "un1000", "un1001", "un1002"]

Как видите, это правильный ответ.

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

let input = ["un0098", "un0099", "un1000", "un1001", "un1002", "un0100", "un0101"]
let output = input.sorted()

let d = Dictionary(grouping: output, by: { s -> String in
    let ix = s.index(s.startIndex, offsetBy:2)
    let ix2 = s.index(ix, offsetBy:2)
    return String(s[ix..<ix2])
})
let model = d.sorted{$0.key < $1.key}

Теперь model подходит в качестве источника данных для вашей таблицыview:

[(key: "00", value: ["un0098", "un0099"]), 
 (key: "01", value: ["un0100", "un0101"]), 
 (key: "10", value: ["un1000", "un1001", "un1002"])]

Если это не совсем то, что вы хотели, должно быть легко увидеть, как это настроить.Структура и order правильные, поэтому, если данные не совсем нужного формата, вы можете изменить их.Например, если вам не нравится начальный ноль в именах ключей, вы можете легко избавиться от него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...