Как отсортировать данный список массивов?

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

1
задан mu is too short 11 April 2019 в 15:25
поделиться

2 ответа

Если каждый элемент имеет номер в конце

list.sort_by { |item| item.scan(/\d*$/).first.to_i }

соответствует этому номеру в конце, возьмите первый (потому что сканирование дает массив результатов), преобразуйте его в целое число [114 ]

проще

list.sort_by { |item| item[/\d*$/].to_i }

[] уже занимает первое совпадение

0
ответ дан Ursus 11 April 2019 в 15:25
поделиться

Существует более общее решение, которое будет работать с большинством строк, содержащих группы чисел.

number = /([+-]{0,1}\d+)/;

strings = [ '2', '-2', '10', '0010', '010', 'a', '10a', '010a', '0010a', 'b10', 'b2', 'a1b10c20', 'a1b2.2c2' ]

p strings.sort_by { |item| [item.split(number).each_slice(2).map {
  |x| x.size == 1 ? [ x[0], '0' ] : [ x[0], x[1] ] }].map {|y| ret = y.inject({r:[],x:[]}) { |s, z| s[:r].push [ z[0], z[1].to_r]; s[:x].push z[1].size.to_s; s }; ret[:r] + ret[:x] }.flatten
}

. Вы можете настроить number в соответствии с типами чисел, которые вы хотите использовать: целые числа, числа с плавающей запятой. и т. д.

Существует некоторый дополнительный код для сортировки равных чисел по длине, так что «10» предшествует «010».

0
ответ дан G. Allen Morris III 11 April 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: