Если вам интересно что-то более читаемое (но, конечно, не так эффективно), вы можете попробовать:
def compare_lists(list1, list2):
if len(list1) != len(list2): # Weed out unequal length lists.
return False
for item in list1:
if item not in list2:
return False
return True
a_list_1 = ['apple', 'orange', 'grape', 'pear']
a_list_2 = ['pear', 'orange', 'grape', 'apple']
b_list_1 = ['apple', 'orange', 'grape', 'pear']
b_list_2 = ['apple', 'orange', 'banana', 'pear']
c_list_1 = ['apple', 'orange', 'grape']
c_list_2 = ['grape', 'orange']
print compare_lists(a_list_1, a_list_2) # Returns True
print compare_lists(b_list_1, b_list_2) # Returns False
print compare_lists(c_list_1, c_list_2) # Returns False
Вы можете использовать прототип для расширения массива:
interface Array<T> {
remove(o: T): Array<T>;
}
Array.prototype.remove = function (o) {
// code to remove "o"
return this;
}
Из TypeScript 1.6 вы можете «изначально» расширять произвольные выражения, например, встроенные типы.
ТипScript 1.6 добавляет поддержку классов, расширяющих произвольное выражение, которое вычисляет функцию-конструктор. Это означает, что встроенные типы теперь могут быть расширены в объявлениях классов.
В предложении extends класса ранее требовалась спецификация типа. Теперь он принимает произвольное выражение, за которым следует список аргументов типа. Тип выражения должен быть типом функции-конструктора с по меньшей мере одной сигнатурой конструкции, которая имеет такое же количество параметров типа, сколько количество аргументов типа, указанных в предложении extends. Тип возвращаемого имени (ов) соответствующей конструкции - это базовый тип, из которого наследуется тип экземпляра класса. Фактически это позволяет указывать как реальные классы, так и «классные» выражения в предложении extends.
// Extend built-in types class MyArray extends Array<number> { } class MyError extends Error { } // Extend computed base class class ThingA { getGreeting() { return "Hello from A"; } } class ThingB { getGreeting() { return "Hello from B"; } } interface Greeter { getGreeting(): string; } interface GreeterConstructor { new (): Greeter; } function getGreeterBase(): GreeterConstructor { return Math.random() >= 0.5 ? ThingA : ThingB; } class Test extends getGreeterBase() { sayHello() { console.log(this.getGreeting()); } }
[]
не может вести себя так, как ожидалось. [Д0] stackoverflow.com/questions/33947854/…
– Andrew Shepherd
19 July 2016 в 22:02
class MyArray<T> extends Array<T> {
remove: (elem: T) => Array<T> = function(elem: T) {
return this.filter(e => e !== elem);
}
}
let myArr = new MyArray<string>();
myArr.remove("some");
это работает для меня с машинописным текстом v2.2.1!
MyArray
, поэтому он не будет работать с другими библиотеками, возвращающими массивы.
– Jan Aagaard
18 July 2018 в 20:59
Добавление к ответу Рикки Гибсона,
export{}
declare global {
interface Array<T> {
remove(elem: T): Array<T>;
}
}
if (!Array.prototype.remove) {
Array.prototype.remove = function<T>(elem: T): T[] {
return this.filter(e => e !== elem);
}
}
Без ошибки экспорта {} TS «Расширения для глобальной области действия могут быть непосредственно вложены в внешние модули или декларации окружающего модуля».
declare global
, похоже, является билетом типа TypeScript 2.1. Обратите внимание, что Array.prototype
имеет тип any[]
, поэтому, если вы хотите, чтобы ваша реализация функции проверялась на согласованность, лучше всего добавить параметр универсального типа.
declare global {
interface Array<T> {
remove(elem: T): Array<T>;
}
}
if (!Array.prototype.remove) {
Array.prototype.remove = function<T>(elem: T): T[] {
return this.filter(e => e !== elem);
}
}
interface Array<T> { remove(o): T[]; }
в новой версии с дженериками – Mariusz Pawelski 9 February 2014 в 02:04interface Array<T>
, который является членом модуля, то естьMyModule.Array<T>
. Это означает, что глобальныйArray<T>
не расширен, но создается новый локальный интерфейс. Вы должны поместить расширения в глобальную область ... Я бы предложил поместить интерфейс в файл.d.ts
. Вам также нужно исправить определение массива или это просто интерфейс? – user75525 14 September 2015 в 09:54