Julia 数据结构

数组类型

  1. element_wise = [5, 10, 15, 15]

这个新的数组(array)是一个包含 4 个 int64 的数组。可以根据它们在数组中的位置用数字索引它们:

element_wise[1] == 5
true
element_wise[2] == 10
true

也可以在类型中看到这一点:

typeof(element_wise)
Array{Int64, 1}

为什么括号很重要
可能已经注意到,每当创建数组时,它通常都在方括号的范围内。如果没有这些括号,数据集合的类型将是元组(tuple)。它们是一种非常有效的数据类型,但如果需要的是数组,元组当然并不是想要的数据类型。

h = 5,10,15,20
typeof(h)
NTuple{4, Int64}

此外,不使用方括号的话,可能会使函数无法理解哪些参数对应哪些变量。以append!()方法为例。append!()方法有两个参数,第一个参数是想要附加到的任何数据,第二个参数是想要附加到它的数据。如果使用方括号,这是可行的,因为数据被视为一个参数。但是,如果使用逗号的话,将显示 ArgumentError。

parameters
v    v
append!([5,10], 15)
parameters
v  v  v
append!(5,10,15)

字典类型

在 Julia 中,字典(dictionary)类型需要明确定义,否则它将返回一个元组。这是一个非常有价值的动态类型,在处理数据集或 JSON 数据时可以进一步说明这一点。

data = Dict(:A => [5,10,15], :B => [11, 12, 13)

使用字典,可以通过调用相应的符号键来调用数据,见下面示例:

data[:A]
[5, 10, 15]

对类型

对(pair)类型实际上是元组类型,但重要的是要认识到,对是元组,但元组并不是对。对刚才用来访问字典部分内容是一样的,也可以用同样的方式来创建:

key = :A => [5,10,15]

集合类型

集合(set)类型只是从类型中提取的唯一值。例如,如果要将集合类型声明为数组,则将获得该数组中的每个唯一值:

arr = [5, 5, 7, 7, 6, 4, 5]
set = Set(arr)
println(set)
[5, 7, 6, 4]

元组类型

元组(tuple)类型是数据类型的通用结构,数据类型不一定具有定义结构。可以认为元组是一个组织较少的数组。

h = 5, 10, 15

创建类型

有时,使用 RAW 数据类型可能会非常乏味且费力,特别是当函数需要使用许多参数时更是如此。这就是结构(struct)的用武之地。创建一个结构将会生成一个可以容纳任何和预定义数据结构的新类型。可以通过使用struct关键字,后面跟一个定义和数据来创建一个结构。

struct typer
h
v
end

有了这个类型,现在就可以为它分配一个新的变量,为构造函数提供必要的数据作为参数:

w = typer(5, 10)

在这个示例中,sturct typer是保存数据hv的新类型。可以通过调用struct.data来访问这个数据:

typer.h
5
typer.v
10

还可以通过函数传递这个类型,例如,从的 typer 结构中添加 h 和 v 数据:

function addtyper(typer)
return(typer.h + typer.v)
end

需要注意的是,Julia 语言中构造类型中的数据是不可变的。这可以通过在类型前放置关键字mutable来改变:

mutable struct typer
h
v
end