Swift4 基础之 数组 Array

var someInts = [Int]()
/*
 someInts 类型为 [Int]
 */
print("someInts is of type [Int] with \(someInts.count) times.")

/*
 someInts 现在包含一个 Int 值
 */
someInts.append(3)

/*
 someInt 现在是空数组,但仍然是 [Int] 类型。
 */
someInts = []

/*
 创建一个带有默认值的数组
 */


/*
 repeating,适当类型的初始值。
 count,新数组的数据项数量。
 */
var threeDoubles = Array(repeating:0.0, count: 3)
print(threeDoubles)

/*
 threeDoubles 是一个 [Double]类型的数组,等价于 [0.0, 0.0, 0.0]
 */

/*
 通过两个数组相加创建一个数组
 使用加法操作符(+)来组合两种已存在的相同类型数组。
 新数组的数据类型会被从两个数组的数据类型中推断出来:
 */

var anotherThreeDouble = Array(repeating:2.5, count:3)

var sixDoubles = threeDoubles + anotherThreeDouble;
print(sixDoubles)



/*
 用数组字面量构建数组
 
 用一个或者多个数值构造数组的简单方法。
 数组字面量是一系列由逗号分割并由方括号包含的数值:
 [value 1, value 2, value 3]。
 */

var shoppingList = ["Eggs", "Milk"]
/*
 shoppingList 的数据类型为 [String]
 */

/*
 访问和修改数组
 
 可以通过数组的方法和属性来访问和修改数组,或者使用下标语法。
 */

/*
 使用数组的只读属性count来获取数组中的数据项数量
 */
print("The shopping list contains \(shoppingList.count) items.")

/*
 使用布尔属性isEmpty作为一个缩写形式去检查count属性是否为0:
 */
if shoppingList.isEmpty {
    print("The shopping list is empty")
} else {
    print("The shopping list is not empty.")
}

/*
 使用append(_:)方法在数组后面添加新的数据项
 */

shoppingList.append("Flour")
print("The shopping list contains \(shoppingList.count) items.")

/*
 使用加法赋值运算符(+=)也可以直接在数组后面添加一个或多个拥有相同类型的数据项
 */
shoppingList += ["Baking Powder"]

shoppingList += ["Chocolate Spread", "Cheese", "Butter"]

/*
 可以直接使用下标语法来获取数组中的数据项,
 把我们需要的数据项的索引值放在直接放在数组名称的方括号中
 */
var firstItem = shoppingList[0]

/*
 可以用下标来改变某个已有索引值对应的数据值
 */
shoppingList[0] = "Six eggs"

print(shoppingList)
/*
 输出为:
 ["Six eggs", "Milk", "Flour", "Baking Powder", "Chocolate Spread", "Cheese", "Butter"]
 */

/*
 利用下标来一次改变一系列数据值,即使新数据和原有数据的数量是不一样的。
 */
shoppingList[4 ... 6] = ["Bananas", "Apples"]
print(shoppingList)
/*
 输出为:
 ["Six eggs", "Milk", "Flour", "Baking Powder", "Bananas", "Apples"]
 */


/*
 调用数组的insert(_:at:)方法来在某个具体索引值之前添加数据项:
 */
shoppingList.insert("Maple Syrup", at: 0)
print(shoppingList)
/*
 输出为:
 ["Maple Syrup", "Six eggs", "Milk", "Flour", "Baking Powder", "Bananas", "Apples"]
 */


/*
 使用remove(at:)方法来移除数组中的某一项。
 这个方法把数组在特定索引值中存储的数据项移除并且返回这个被移除的数据项
 (我们不需要的时候就可以无视它):
 */
let mapleSyrup = shoppingList.remove(at: 0)
print(shoppingList)
/*
 输出为:
 ["Six eggs", "Milk", "Flour", "Baking Powder", "Bananas", "Apples"]
 */


/*
 把数组中的最后一项移除,可以使用removeLast()方法
 */
shoppingList.removeLast()
print(shoppingList)
/*
 输出为:
 ["Six eggs", "Milk", "Flour", "Baking Powder", "Bananas"]
 */

/*
 把数组中的第一项移除,可以使用removeFirst()方法
 */
shoppingList.removeFirst()
print(shoppingList)
/*
 输出为:
 ["Milk", "Flour", "Baking Powder", "Bananas"]
 */

/*
 数组遍历
 
 使用 for-in 循环遍历所有数组中的数据项
 */
for item in shoppingList {
    print(item)
}
/*
 输出为:
 Milk
 Flour
 Baking Powder
 Bananas
 */

/*
 如果同时需要每个数据项的值和索引值,
 可以使用enumerated()方法来进行数组遍历。
 
 enumerated()返回一个由每一个数据项索引值和数据值组成的元组。
 我们可以把这个元组分解成临时常量或者变量来进行遍历
 */
for (index, value) in shoppingList.enumerated() {
    print("Item \(index + 1) : \(value)")
}
/*
 输出:
 Item 1 : Milk
 Item 2 : Flour
 Item 3 : Baking Powder
 Item 4 : Bananas
 */

var index = 0
for item in shoppingList {
    print(item)
    if index == 2 {
        shoppingList.remove(at: index)
    }
    index += 1
}
print(shoppingList)
/*
 输出:
 ["Milk", "Flour", "Bananas"]
 */