草庐IT

Julia 元组

runoob 2023-04-07 原文

Julia 元组

Python 的元组与数组类似,都是有序的元素集合,不同之处在于元组的元素不能修改。

另外元组使用小括号 (...),数组使用方括号 [...]

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可,数组中的很多函数也可以在元组中使用。

如下实例:

实例

julia> tupl=(5,10,15,20,25,30)   # 创建一个元组
(5, 10, 15, 20, 25, 30)

julia> tupl
(5, 10, 15, 20, 25, 30)

julia> tupl[3:end]          # 输出第三个到最后一个元素的元组
(15, 20, 25, 30)

julia> tupl = ((1,2),(3,4))   # 创建二维元组
((1, 2), (3, 4))

julia> tupl[1]      # 访问二维元组元素,输出第一维元组
(1, 2)

julia> tupl[1][2]    # 访问二维元组元素,输出第一维元组的第二个元素
2

元组的元素是不能修改,如果我们尝试修改它就回报错:

实例

julia> tupl2=(1,2,3,4)
(1, 2, 3, 4)

julia> tupl2[2]=0
ERROR: MethodError: no method matching setindex!(::NTuple{4, Int64}, ::Int64, ::Int64)
Stacktrace:
 [1] top-level scope
   @ REPL[8]:1

元组命名

我们可以为元组命名,从而可以更方便的访问它。

以下列出了几种不同元组的命名方式。

1、元组中的键(key)和值(value)分开命名

元组中的键(key)和值(value)可以分开独立命名,实例如下:

实例

julia> names_shape = (:corner1, :corner2)
(:corner1, :corner2)

julia> values_shape = ((100, 100), (200, 200))
((100, 100), (200, 200))

julia> shape_item2 = NamedTuple{names_shape}(values_shape)
(corner1 = (100, 100), corner2 = (200, 200))

我们可以使用 . 点号来访问元组:

实例

julia> shape_item2.corner1
(100, 100)

julia> shape_item2.corner2
(200, 200)

2、键(key)和值(value)同时在一个元组中

键(key)和值(value)可以同时在一个元组中,实例如下:

实例

julia> shape_item = (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))
(corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))

我们可以使用 . 点号来访问元组:

实例

julia> shape_item.corner1
(1, 1)

julia> shape_item.corner2
(-1, -1)

julia> shape_item.center
(0, 0)

julia> (shape_item.center,shape_item.corner2)
((0, 0), (-1, -1))

我们还可以像使用普通元组一样访问所有值,如下所示:

实例

julia> c1, c2, center = shape_item
(corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))

julia> c1
(1, 1)

3、合并两个已命名的元组

我们可以使用 merge() 函数来合并两个已命名的元组,实例如下:

实例

julia> colors_shape = (top = "red", bottom = "green")
(top = "red", bottom = "green")

julia> shape_item = (corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))
(corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0))

julia> merge(shape_item, colors_shape)
(corner1 = (1, 1), corner2 = (-1, -1), center = (0, 0), top = "red", bottom = "green")

元组作为函数参数

以下实例我们创建一个 testFunc 函数,并将元组 options 作为参数传入:

实例:test.jl 文件代码

# 创建函数
function testFunc(x, y, z; a=10, b=20, c=30)
    println("x = $x, y = $y, z = $z; a = $a, b = $b, c = $c")
 end

# 创建元组
 options = (b = 200, c = 300)
 
# 执行函数,元组作为参数传入
 testFunc(1, 2, 3; options...)

使用 julia 命令执行以上文件,输出结果为:

$ julia test.jl
x = 1, y = 2, z = 3; a = 10, b = 200, c = 300

如果指定的参数在元组后面,则会覆盖元组中已有的参数:

实例

# 创建函数
function testFunc(x, y, z; a=10, b=20, c=30)
    println("x = $x, y = $y, z = $z; a = $a, b = $b, c = $c")
 end

# 创建元组
 options = (b = 200, c = 300)

# 执行函数,元组作为参数传入,指定参数在元组前,不会覆盖
testFunc(1, 2, 3; b = 1000_000, options...)

# 执行函数,元组作为参数传入,指定参数在元组后,会覆盖
testFunc(1, 2, 3; options..., b= 1000_000)

使用 julia 命令执行以上文件,输出结果为:

$ julia test.jl
x = 1, y = 2, z = 3; a = 10, b = 200, c = 300
x = 1, y = 2, z = 3; a = 10, b = 1000000, c = 300

有关Julia 元组的更多相关文章

  1. sql - Ruby ActiveRecord 和 sql 元组支持 - 2

    假设底层数据库支持,ActiveRecord是否支持where子句中的元组?生成的where子句类似于:where(name,address)in(('John','123MainSt'))我试过:Person.where({[:name,:address]=>['John','123MainSt']})但它没有用。 最佳答案 tupleArray=[['John','123MainSt'],['Jane','124MainSt']]Person.where("(name,address)IN(#{(['(?)']*tupleArr

  2. ruby - 在 Ruby 中使用元组? - 2

    有人在Ruby中使用元组吗?如果是这样,如何实现元组?Ruby散列很好用,几乎也可以工作,但我真的很想看到类似Python中的Tuple类的东西,您可以在其中使用.符号来查找您要查找的值。我想要这个,以便我可以创建D的实现,类似于Dee用于Python。 最佳答案 OpenStruct?简要示例:require'ostruct'person=OpenStruct.newperson.name="JohnSmith"person.age=70person.pension=300putsperson.name#->"JohnSmith"

  3. javascript - 为什么 JSHint 不喜欢三元组来调用对象的方法? - 2

    JSHint给出以下错误:Expectedanassignmentorfunctioncallandinsteadsawanexpression.对于下面这行代码:(aFunctionOrNull)?aFunctionOrNull():someObject.someMethod();它突出显示了someMethod上的最终),所以我认为错误就在那里。当我将代码更改为if(){}else{}语法时,代码有效并且JSHint没有问题。我不介意更长的语法,但我想了解为什么JSHint会这样说,以及这是否是一种不好的做法。最大的混淆可能来自术语。someObject.someMethod()不

  4. javascript - 使用解构赋值交换元组元素 - 2

    我想使用解构赋值就地交换元组的元素,如下所示:vara=[1,2];[a[1],a[0]]=a;但是,这会产生[1,1]。Babel将其编译为a[1]=a[0];a[0]=a[1];我本以为这应该编译为lettmp0=a[0];lettmp1=a[1];a[0]=tmp1;a[1]=tmp0;Traceur的行为与babel相同。所以我猜这是指定的行为?我想交换两个元素就地。唯一的方法就是...lettmp=a[0];a[0]=a[1];a[1]=tmp;但我认为以上是解构赋值应该让我避免不得不做的事情。我完全有能力颠倒数组中两个元素的顺序,所以这不是我的问题。我可以做一些像a.pus

  5. 稀疏矩阵的三元组存储及快速转置 - 2

    问题描述 【问题描述】实现稀疏矩阵的三元组表存储和快速转置运算。【输入形式】输入一个整型的6阶稀疏矩阵。【输出形式】输出稀疏矩阵的三元组表形式,使用快速转置方法进行转置运算,输出辅助数组num和cpot的值及转置后的三元组表形式。【样例输入】10000000-20004000030000000000000500000-600070【样例输出】M667001011-2014402230435052-605570num112111cpot012456T667001011-20223025-60345041405570【样例说明】M表示转置前矩阵,T表示转置后矩阵。667表示稀疏矩阵的行数mu,列数

  6. go - 为什么不能在 Go 中使用 add 运算符进行元组赋值? - 2

    关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭4年前。Improvethisquestion根据theGolanglanguagesyntaxspecification:Assignment=ExpressionListassign_opExpressionList.assign_op=[add_op|mul_op]"=".此外:Atupleassignmentassignstheindi

  7. datetime - 如何获得一片元组(小时,分钟) - 2

    我遇到了无法解决的问题。我正在使用https://github.com/kmanley/golang-tuple创建元组。我有一份session记录list:minutes:=int{0,30}//Minutesare0and30还有四个参数:start,startBreak,stop,stopBreak:start:=tuple.NewTupleFromItems(9,30)//Itrepresents"9:30"startBreak:=tuple.NewTupleFromItems(12,0)//Itrepresents"12:00"stop:=tuple.NewTupleFrom

  8. (数据结构)C语言稀疏矩阵存储之三元组 —— 2022/3/25 - 2

    稀疏矩阵的三元组!!!对特殊矩阵压缩存储的介绍数据结构中对称矩阵的存储利用三元组存储稀疏矩阵——头文件结构体声明三元组结构体声明稀疏矩阵构造增添三元组元素的函数构造展示稀疏矩阵的函数——主函数!!!对特殊矩阵压缩存储的介绍数据结构中,提供针对某些特殊矩阵的压缩存储结构此处说的特殊矩阵主要分为以下二类:含有大量相同数据元素的矩阵,比如对称矩阵含有大量0元素的矩阵,比如稀疏矩阵、上(下)三角矩阵针对以上两类矩阵,数据结构的压缩存储的思想是矩阵中相同数据元素(包括元素0)只存储一个数据结构中对称矩阵的存储对称矩阵指的是各数据元素沿主对角线对称的矩阵我们借助如下公式实现对下三角元素的存储(i代表行,j

  9. go - 解码在根级别没有键的元组 - 2

    我正在尝试使用golang,并认为从restapi解析一些json是一个很好的用例。它看起来就像定义一个结构并将api响应解码到其中一样简单。当然,我正在使用的api响应并不是一个很好的选择。我正在玩craigslistjsonsearch-响应是2个对象的数组。第一个对象是结果数组,第二个对象是misc。元数据。[[{"Ask":6000,"CategoryID":145,"ImageThumb":"https:\/\/images.craigslist.org\/01212_dZ9PfxSmjEH_50x50c.jpg","Latitude":39.591784,"Longitud

  10. java - 从 xml 文件中提取信息作为 RDF 三元组 - 2

    任何人都可以推荐一个教程或告诉我如何构建一个java程序来从xml文件中提取信息并使用现有的本体将输出生成为RDF三元组。一个例子会很有帮助。谢谢 最佳答案 有现成的工具可以解决这个问题,例如XSPARQL.您可以编写一个XSPARQL查询来查询XML并生成RDF三元组作为输出。Thisexample应该非常接近您要查找的内容。 关于java-从xml文件中提取信息作为RDF三元组,我们在StackOverflow上找到一个类似的问题: https://sta

随机推荐