js模拟C#中List的简单实例


在JavaScript中,模拟C#中`List`的功能,我们通常可以使用数组(Array)结合一些额外的函数来达成。虽然JavaScript的数组与C#的`List`在底层实现和性能优化上有所不同,但它们提供了类似的功能集,如添加、删除、查找元素等。

以下是一个简单的示例,展示了如何在JavaScript中创建一个模拟`List`的类,这里我们假设`T`为任意类型,为了简化,我们不限制类型:


class List {
    constructor() {
        this.items = []; // 初始化一个空数组来存储元素
    }

    // 添加元素到列表末尾
    add(item) {
        this.items.push(item);
    }

    // 在指定索引处插入元素
    insert(index, item) {
        if (index >= 0 && index <= this.items.length) {
            this.items.splice(index, 0, item);
        } else {
            throw new Error("Index out of range");
        }
    }

    // 移除并返回指定索引处的元素
    removeAt(index) {
        if (index >= 0 && index < this.items.length) {
            return this.items.splice(index, 1)[0];
        } else {
            throw new Error("Index out of range");
        }
    }

    // 移除列表中第一个匹配的元素
    remove(item) {
        const index = this.items.indexOf(item);
        if (index !== -1) {
            this.items.splice(index, 1);
            return true;
        }
        return false;
    }

    // 获取列表中指定索引的元素
    get(index) {
        if (index >= 0 && index < this.items.length) {
            return this.items[index];
        } else {
            throw new Error("Index out of range");
        }
    }

    // 获取列表的长度
    get length() {
        return this.items.length;
    }

    // 遍历列表
    forEach(callback) {
        this.items.forEach(callback);
    }

    // 转换为数组
    toArray() {
        return this.items.slice();
    }
}

// 使用示例
const myList = new List();
myList.add(1);
myList.add(2);
myList.add(3);

console.log(myList.toArray()); // 输出: [1, 2, 3]

myList.insert(1, 1.5);
console.log(myList.toArray()); // 输出: [1, 1.5, 2, 3]

console.log(myList.removeAt(1)); // 输出: 1.5
console.log(myList.toArray()); // 输出: [1, 2, 3]

myList.remove(2);
console.log(myList.toArray()); // 输出: [1, 3]

console.log(myList.get(0)); // 输出: 1

这个`List`类提供了基本的`List`操作,如添加、插入、删除、获取元素以及遍历等。注意,由于JavaScript的弱类型特性,我们没有对元素的类型进行强制约束。