不同语言数组详解

1、基本写法

javascript 复制代码
//dart
List<int> list1 = [];
// 带初始值的数组
List<int> numbers = [1, 2, 3, 4, 5];
var fruits = ['苹果', '香蕉', '橙子']; // 推断为 List<String>


// Swift
var numbers: [Int] = [1, 2, 3]
let arr1:Array<String> = ["3","4"]

// Kotlin
val numbers: Array<Int> = arrayOf(1, 2, 3)  // 显式类型
val emptyArray: Array<String> = emptyArray()


// List(不可变默认)
val list = listOf(1, 2, 3)                  // 不可变列表
val mutableList = mutableListOf(1, 2, 3)    // 可变列表

// TypeScript
const numbers: number[] = [1, 2, 3];         // 显式类型

//Python
numbers = [1, 2, 3]                         # 字面量
names = list(("John", "Jane"))              # 构造函数

2、引用类型和值类型

上面几门语言中swift的数组是值类型,但是其他的是引用类型,值类型的数组具有以下特点:

(1)值类型写时赋值

javascript 复制代码
// 数组是值类型 - 验证
var array1 = [1, 2, 3]
var array2 = array1  // 这里可能创建副本(写时复制)
array1.append(4)     // 修改 array1 不会影响 array2

如果是引用类型那么array1和array2指向的是同一份内存地址,但是swift的值类型特性就不是这样

(2)值类型修改时地址变化

javascript 复制代码
var variableArray = [1, 2, 3]
print("初始地址:", Unmanaged.passUnretained(variableArray as AnyObject).toOpaque())

variableArray.append(4)          // [1, 2, 3, 4]
print("append后地址:", Unmanaged.passUnretained(variableArray as AnyObject).toOpaque())

variableArray[0] = 10            // [10, 2, 3, 4]  
print("修改元素后地址:", Unmanaged.passUnretained(variableArray as AnyObject).toOpaque())

variableArray = [5, 6, 7]        // 重新赋值
print("重新赋值后地址:", Unmanaged.passUnretained(variableArray as AnyObject).toOpaque())

初始地址: 0x0000600003e6c0a0
append后地址: 0x0000600003e6c1c0
修改元素后地址: 0x0000600003e6c1c0  // 可能与append后相同
重新赋值后地址: 0x0000600003e6c2e0

只要数组有变动就可能重新分配内存

3、可变与不可变

js/ts/python完全可变,但是swift和kotlin有不可变的数组,具体为:

swift:用let 和var来控制不可变与可变,用var申明就完全可变,用let申明就完全不可变,体现为,不可修改不可重新赋值

kotlin:用val和var来修饰的也能控制可变不可变,但是与swift完全不一样,val修饰的不可变不是真正意义的不可变,而是说不可以重新赋值,到可以修改内容,真正的不可变与可变通过不同的申明方式来实现,Array可变,List默认不可变

javascript 复制代码
val numbers: Array<Int> = arrayOf(1, 2, 3)  // 可变
val emptyArray: Array<String> = emptyArray()//可变


// List(不可变默认)
val list = listOf(1, 2, 3)                  // 不可变列表
val mutableList = mutableListOf(1, 2, 3)    // 可变列表

4、都支持 map、filter、reduce 等函数式操作

相关推荐
chlk12320 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑20 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件21 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux
Sinclair3 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
木心月转码ing3 天前
WSL+Cpp开发环境配置
linux
Rockbean4 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek