Сортировка смешанного буквенно-цифрового массива

Давайте возьмем Ваш пример Собаки и класса CAT, и давайте проиллюстрируем использование C#:

И собака и кошка являются животными, а именно, млекопитающие четвероногого животного (животные waaay слишком общий). Давайте предположим, что у Вас есть Млекопитающее абстрактного класса для них обоих:

public abstract class Mammal

Этот базовый класс будет, вероятно, иметь методы по умолчанию, такие как:

  • Канал
  • Помощник

, Все из которых являются поведением, которые имеют более или менее ту же реализацию между любой разновидностью. Для определения этого, Вы будете иметь:

public class Dog : Mammal
public class Cat : Mammal

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

public class Giraffe : Mammal
public class Rhinoceros : Mammal
public class Hippopotamus : Mammal

Это все еще будет допустимо, потому что в ядре функциональности Feed() и Mate() все еще будет то же.

Однако жирафы, носорог и гиппопотамы не являются точно животными, из которых можно сделать домашних животных. Это - то, где интерфейс будет полезен:

public interface IPettable
{
    IList<Trick> Tricks{get; set;}
    void Bathe();
    void Train(Trick t);
}

реализация для вышеупомянутого контракта не будет тем же между кошкой и собакой; помещение их реализаций в абстрактном классе для наследования будет плохой идеей.

Ваша Собака и определения CAT должны теперь быть похожими:

public class Dog : Mammal, IPettable
public class Cat : Mammal, IPettable

Теоретически можно переопределить их от более высокого базового класса, но по существу интерфейс позволяет Вам прибавлять только вещи, в которых Вы нуждаетесь в класс без потребности в наследовании.

, Следовательно, потому что можно обычно только наследоваться одному абстрактному классу (на большинстве языков OO со статическим контролем типов, который является... исключениями, включают C++), но быть в состоянии реализовать несколько интерфейсов, это позволяет Вам создавать объекты в строго как требуется основание.

55
задан Mel 29 January 2019 в 14:53
поделиться

1 ответ

Это работало на меня, и это немного более компактно.

const reg = /[0-9]+/g;

array.sort((a, b) => {
     let v0 = a.replace(reg, v => v.padStart(10, '0'));
     let v1 = b.replace(reg, v => v.padStart(10, '0'));
     return v0.localeCompare(v1);
});
0
ответ дан 26 November 2019 в 17:47
поделиться
Другие вопросы по тегам:

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