swift 元组和数组的区别_swift json和数组 - CSDN
  • 有时候需要把元组中的数据拆分出来使用比如: var stu = ("范冰冰",30,"女") // 1)将stu中的数据赋值给三个变量。 var (name,age,gender) = stu //2)只需要部分变量,可以用 .语法赋值,或者用下划线顶替空白...



    //1.有时候需要把元组中的数据拆分出来使用比如:



    var stu = ("范冰冰",30,"")


    // 1)stu中的数据赋值给三个变量。

    var (name,age,gender) =stu


    //2)只需要部分变量,可以用 .语法赋值,或者用下划线顶替空白位置,如下

    var stu1 = ("赵薇",40,"")


    var (name1,age1,_) =stu1


    println(name)


    //let引导的时候只能赋值一次。相当于常量

    //var (name,age,gender) = stu

    //

    //println(name)



    //name赋值别的数据时,元组中的数据不会改变

    name ="李晨"




    2.数组

    //所谓数组,就是将多个同样数据类型的数据按照一定的顺序存储起来,使用一个名字加下标进行引用的数据结构。


    //c 语言。 int array[10]; swift,let写几个元素长度就是几,只能赋值一次。用var引导长度可变。



    //一旦赋值长度、内容不可更改的数组

    let array:[Int]


    array = [1,2,3,4,5]


    //array[2] = 23

    //array = [1,2,3,4,5]


    //数组的遍历


    print("第一个数组:")


    for (var i:Int =0;i<=4;i++)

        

    {

        print(array[i])

    }


    println()




    //元素、长度可变的数组

    var array1:[Int] = [1,2,3,4,5]


    array1[0] = 2

    print("第二个数组:")



    for (var i:Int =0;i<=4;i++)

    {

        print(array1[i])

    }




    展开全文
  • **### 为什么需要元组为了回答这个问题,首先让我们脑补一个例子:\ 假设有一个班级,数学科目经常小测((⊙o⊙)),数学老师非常用心的把每次成绩都记录下来了。如果我要拿到小明同学最近5次的数学成绩,应该怎么...

    **### 为什么需要元组

    为了回答这个问题,首先让我们脑补一个例子:\
    假设有一个班级,数学科目经常小测((⊙o⊙)),数学老师非常用心的把每次成绩都记录下来了。如果我要拿到小明同学最近5次的数学成绩,应该怎么定义数据格式?

    首先回顾一下,在c的时代,数据类型有这么几类:

    基本类型 构造类型 指针类型 空类型
    整型 short int long 数组 [] 指针 * void
    浮点型 float double 结构体 struct \
    \
    字符类型 char 共用体 union \
    \
    布尔类型 bool (C99增加) 枚举类型 enum \
    \

    用c语言有限的数据类型,要怎么定义需要的数据呢?

    char* name = "小明";
    float scores[5] = {90,87,88.5,95,78};

    看上去还不太复杂。\
    再进一步想,如果实现一个c函数,由函数返回这些数据,怎么办?只能定义struct了。

    //先声明一个struct
    struct name_scores {
        char *name;
        float scores[5];
    };
    
    //给struct赋值
    struct name_scores xiaoming = {"小明" , {90,87,88.5,95,78}};
    
    //函数返回类型是结构体
    return xiaoming;

    这个解决方案,看上去真是just so so。

    到了c++的时代,似乎可以试试类的概念,把char*也换成string。

    //先声明一个类
    class Student {
      public:
        string name;
        float scores[5];
    };
    
    //实例化一个对象,赋值
    Student xiaoming;
    xiaoming.name = "小明";
    xiaoming.scores = {90,87,88.5,95,78};
    
    //函数中返回对象
    return xiaoming;

    然并卵,更麻烦了。

    到了乔老爷子的时代,oc语言增加了NS开头的基本数据类,NSString NSArray NSDictionary都是非常常用的,我们可以试着组合一下数据。

    //存储数据
    NSString *name = @"小明";
    NSArray *scores = @[@90,@87,@88.5,@95,@78];
    NSDictionary *returnDic = @{@"name":name,@"scores":scores};
    
    //返回字典
    return returnDic;

    这已经是最简单的写法,依然是比较复杂的形式。

    所以,有没有一种简单的数据类型,可以轻松组合不同类型的数据?\
    有!\
    Swift的元组闪亮登场✨✨

    //一行代码搞定
    return ("小明",(90,87,88.5,95,78))

    哇,只需一行代码,你买不了吃亏,买不了上当,元组就是这么霸气!\
    有些人可能就不服气了,数组一样可以这么简洁,为什么不用数组?客官请继续看。

    元组、数组、字典,合适才是最好

    首先说说字典,字典是key:value键值对,它适合将不同种类、不同用途的数据组合在一起,通过key值进行索引。

    优点:

    1. 通过key值进行索引,查找效率高
    2. 通过key值进行数据标注,可读性高,易于区分多种数据
    3. key值唯一,增删改可以保证数据唯一性

    缺点:

    1. 一个value必须对应一个key,尽管有时不需要key
    2. key值顺序不定,字典对key值表进行了hash,所以不方便存储对顺序敏感的数据

    具体到小明的例子,数据格式如下

    var name_score : Dictionary = ["name":"小明","scores":[90,87,88.5,95,78]]

    我们试着读取其中的数据

    var name = name_score["name"]  //打印值为Optional(小明)
    var scores = name_score["scores"]  //打印值为Optional((90,87,88.5,95,78))

    而如果print(name_score),会发现输出的key值顺序发生了变化

    字典输出,观察key值顺序


    接下来,我们再看看数组。\
    最早在c语言中,数组用来存储多个相同类型的数据,到了OC不再限定存储数据的类型,Swift也沿用了OC的传统。这也是小明的例子中争议的来源,用数组也可以解决问题呀。

    那么我们说说数组的优缺点吧。

    优点

    1. 数据存储顺序固定,增删改也通过index来进行
    2. 集成了遍历方法,适合对大量同类数据的处理
    3. 不需要定义key,写法相对简单

    缺点

    1. 访问特定数据时,查找效率不高
    2. 处理特定数据时,需要牢记数据的index,可读性不好,容易产生错位处理

    仍以小明为例

    var name_score = ["小明",[90,87,88.5,95,78]]

    访问数据的方式如下

    var name = name_score[0]  //打印值为小明
    var score = name_score[1]  //打印值为(90,87,88.5,95,78)

    我们print(name_score),可以看一下结果

    数组输出,顺序很重要


    Swift已经对Array和Dictionary做了大量改良,非常方便使用。可是元组又可以为我们带来什么呢?

    • 首先,当我们在Array中放置不同类型的数据时,我们无法再对每个数据的type做定义。\
      ["小明",[90,87,88.5,95,78]]可以被修改为[1,[90,87,88.5,95,78]],而1显然不是正确的名字格式\
      而元组可以定义元素的类型\
      var tuple : (String, Array) = ("小明",[90,87,88.5,95,78])\
      更深一步,元组嵌套元组每一个元素的类型都可以定义\
      var tuple : (String, (Float,Float,Float,Float,Float)) = ("小明",(90,87,88.5,95,78))

    • 其次,数组的元素个数可能发生改变,我可以增加、删除元素\
      name_score.append("添加一个字符串")\
      name_score.removeAtIndex(1)\
      而元组一旦定义,其元素个数确定,不能增加、删除

    • 字典必须定义key,而元组不需要。当然,如有必要,你还可以为每个元素命名

      var tuple = (name:"小明",[90,87,88.5,95,78])\
      tuple.name 等同于 tuple.0

    • 字典的存储顺序不确定,而元组是固定的

    通过上面几个简单的对比分析,我们发现,元组综合了数组、字典、甚至struct的一些优点,是对数据类型的一个强力补充。

    下面分析一下元组的优缺点。

    优点

    1. 元组可以同时存储多种类型元素,且元素类型固定,以保证数据安全,除非你定义数据类型为Any。编译器会对赋值参数类型进行检查
    2. 元组的元素个数固定,不允许增加、删除,编译器会严格校验赋值参数个数
    3. 无需定义key,但是必要时可以为数据命名,方便数据访问
    4. 适合同时遍历多元数据,例如官方文档的例子\
      for (index, value) in shoppingList.enumerate()

    缺点

    1. 不适合存储大量数据,因为元组不支持append、remove等方法
    2. 考虑到工程实际情况,后端使用的语言可能不支持元组,需要转换为其他格式

    所以说,元组适合应用于组合少量的多元的数据,与数组、字典结合使用可以产生强大威力。

    展开全文
  • ####1、元组的简介 https://www.jianshu.com/p/498bb49be04d ####2、数组、字典、元组三者的区别 https://www.jianshu.com/p/27054bb16c41 ####3、元组实践 https://www.jianshu.com/p/15262607659c ...

    ####1、元组的简介
    https://www.jianshu.com/p/498bb49be04d

    ####2、数组、字典、元组三者的区别
    https://www.jianshu.com/p/27054bb16c41
    ####3、元组实践
    https://www.jianshu.com/p/15262607659c

    展开全文
  • 元组是Objective-C中没有的数据类型,数组类似,都是表示一数据的集合,但数组不同,它的特点是: 元组的长度任意元组中的数据可以是不同的数据类型 元组的定义很简单,用小括号括起来,然后以逗号隔...

    元组的定义

    元组是Objective-C中没有的数据类型,与数组类似,都是表示一组数据的集合,但与数组不同,它的特点是:

    • 元组的长度任意
    • 元组中的数据可以是不同的数据类型
    元组的定义很简单,用小括号括起来,然后以逗号隔开就可以了,如:
    [javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. var userInfo = ("Bannings" ,true, 22)  

    读取元组中的数据

    这样就创建了一个元组,而想要获取其中的值,则有多种方法,可以直接通过索引来取:
    [javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. userInfo.0  //Bannings  
    2. userInfo.1  //true  
    3. userInfo.2  //22  
    但是这样并不方便,也不直观,那么可以用下面这种方式来访问:
    [javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. let (name, isMale, age) = userInfo  
    2. name    //Bannings  
    3. isMale  //true  
    4. age     //22  
    把已知的userInfo赋给一个全是变量名组成的新的元组,那么就能以变量名去访问元组中的数据了。
    还有另外一种方法也能以变量名的方式去访问元组中的数据,那就是在元组初始化的时候就给它一个变量名:
    [javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. let userInfo = (name:"Bannings" ,isMale:true, age:22)  
    2. userInfo.name       //Bannings  
    3. userInfo.isMale     //true  
    4. userInfo.age        //22  

    跳过不关心的值

    除此之外,元组还支持“跳过”某些你并不关心的值,只需要用下划线(_)去忽略它们就行了:
    [javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. let (name,  _, age) = userInfo  
    2. name    //Bannings  
    3. //isMale  这个就不能访问了  
    4. age     //22  
    或者是在该元组初始化的时候不给它指定变量名:
    [javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. let userInfo = (name:"Bannings" ,true, age:22)  
    2. userInfo.name       //Bannings  
    3. //userInfo.isMale     这个就不能访问了  
    4. userInfo.age        //22  

    可变元组和不可变元组

    用var定义的元组就是可变元组,let定义的就是不可变元组。不管是可变还是不可变元组,元组在创建后就不能对其长度进行增加和删除之类的修改,只有可变元组能在创建之后修改元组中的数据:
    [javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. var userInfo = (name:"Bannings" ,true, age:22)<span style="white-space:pre">    </span>//定义可变元组  
    2. userInfo.name = "newName"  
    3. userInfo.name   //newName  
    4.   
    5. let userInfo1 = (name:"Bannings" ,true, age:22)<span style="white-space:pre">   </span>//定义不可变元组  
    6. userInfo1.name = "newName"  //报错,不可修改  
    需要注意的是,可变元组虽然可以修改数据,但却不能改变其数据的数据类型:
    [javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. var userInfo = (name:"Bannings" ,true, age:22)  
    2. userInfo.name = 1   //报错 
    展开全文
  • swift元组

    2015-10-02 15:11:30
    元组和数组非常相似,区别在于 元组的长度是任意的、元组中的数据可以是不同类型的。 1.元组的定义 var userInfo1 = ("zhangsan" , "man ",22) 2.读取元组中的数据 (1)print(userInfo1.1) (2)let ...
  • //由于Swift的类型推导,newTuple被推导为(String,Int)类型的变量元组的解绑几个变量一旦联合在一起,组成了一个元组,他们就被“绑定”了,要想从一个元组中单独取出某一个数据时,需要解绑元组。直接解绑直接...
  • 元组的不可变可变 取决于 修饰符 let 和 var 。let 修饰的元组 不可变,var修饰的元组可变。 定义方式1: 不给元组中的元素指定名字 let httpState1 = (true,200,"成功"); 定义方式2: 给元
  • Swift 元组 和 if 语句

    2019-07-05 08:02:59
    // (一) 元组 /* 格式 变量或常用关键字 元组变量 = (变量,变量,.....) 说明: 1.元组变量还是变量,只是和其他变量表现形式不一样 2.()括号里面可以放入N个变量组成 */ var B = (1,...
  • 作为 Swift 中比较少见的语法特性,元组只是占据了结构体和数组之间很小的一个位置。此外,它在 Objective-C(或者很多其他语言)中没有相应的结构。最后,标准库以及 Apple 示例代码中对元组的使用也非常少。可能它...
  • Swift(09)- 元组

    2019-05-14 18:18:18
    元组Swift编程语言中唯一的一种复合类型。它可以将指定有限个的任何类型依次整理为一个对象。一个元组类型的形式为:(type1, type2, type3, … , typen)。元组中的每一种类型都可以是任意的结构体、枚举或类类型...
  • 元组 结构元组可以储存2个或多个变量 var tupleName : (DataType1,DataType2)就像定义变量,你可以为你的元组定义任何变量名。 var person : (String,Int) person = ("Kaven",47)访问元组的数据为了方便访问元组的...
  • Swift 元组Tuple

    2019-09-17 17:21:21
    Swift 增加了 Objective-C 中没有的高阶数据类型元组(Tuple)。 元组可以让你创建或者传递一数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。 元组 元组(tuples)把多个值组合成一个复合值。...
  • swift -2 元组,函数

    2015-09-23 17:01:53
    1、元组和数组非常相似,区别在于什么? ·元祖的长度是任意的 ·元祖中的数据可以是不同类型的 (当然,这只是大多数人多说法,但是个人并不认同,数组的长度也是可以任意的,数据也可以是不同类型的) ...
  • 元组(tuples)是把多个值组合成一个复合值。  元组内的值可以使任意类型,并不要求是相同类型。  比如(404, "Not Found") ,这是一个描述 HTTP 状态码(HTTP status code)的元组,  Http 状态码是...
  • 1. 元组英文名字 Tuple,将多个数据类型(任意类型)组合成一个数据,c语言的中的机构体有几分相似,功能也是非常强大的,尤其是在定义请求参数,状态之类的地方经常用到。 let http404Error:(Int,String) = (404,...
  • Swift中元及函数

    2015-09-23 12:08:54
    Swift中元及函数 函数嵌套,函数当做参数传值,元组及函数的相关用法
  • Swift- 元组和可选类型

    2018-06-15 16:14:04
    元组(Tuples)元组适合临时的相关的数据,如函数返回值,不适合复杂的数据结构,复杂的数据结构用类(class)或结构体(structure)定义//1. 元组的定义 //元组包含多个值,每个值的类型可以不同 let http404Error = ...
  • swift 元组

    2015-09-23 10:10:46
    // 和数组很相似,区别在于什么? // 元组中的数据可以是不同类型的 //var userInfo1 = ("zhangSan", "man", 22) //// 读取元组中的数据,可以通过点的方法 //print(userInfo1.1) // //let (name, isMale,...
  • Swift-元组(Tuple)

    2016-01-13 15:31:04
    Swift-元组(Tuple)
  • /* 元组(tuples)把多个值组合成一个复合值。... // mytuples 的类型是 (Int, String),值是 (123, "理想") *注* 关于元组类型的说明:你可以把任意顺序的类型组合成一个元组,这个元组可以包含所有类型。只要你想
1 2 3 4 5 ... 20
收藏数 2,201
精华内容 880
热门标签
关键字:

swift 元组和数组的区别