前言
基上篇文章到現(xiàn)在也有段時間了灾茁,主要是小編公司開始做了一個項目诚纸,感覺也沒多少界面撰筷,就是愣讓小編寫了這么久,感覺還是一些知識點不太牢固咬清,調(diào)試和寫起來闭专,還是費了一些時間。但是這篇文章小編要介紹的是旧烧,如果正確學習和使用swift
里面的數(shù)組影钉,小編自學的swift
可能理解不是很透徹,多包含掘剪。
注意:本篇文章講的是如何使用swift
里面的數(shù)組,只做功能的使用平委,原理闡述比較少(主要小編也是菜雞),以后七秒會在文章底部推薦一些利于開發(fā)的破解軟件夺谁,敬請期待A狻!今天推薦的是青花瓷 Charles
友情鏈接:
1.數(shù)組的可變性
swift
里面的數(shù)組都是具有值語義性
(也就是深拷貝),當你使用數(shù)組賦值或者傳遞參數(shù)的時候匾鸥,那么這個數(shù)組就會被寫時賦值
(以后文章也許會闡述到)蜡塌,也就是賦值或傳遞的是一個新的數(shù)組
var arrayA = [1,2,3];
let arrayB = arrayA;
arrayA.append(4);/// 在此才會使用'寫時賦值'技術(shù),之前arrayA 和arrayB都是共享內(nèi)存空間的 ,將數(shù)組傳遞給方法也是一樣的
print(arrayA);/// [1, 2, 3, 4]
print(arrayB);/// [1, 2, 3]
2.數(shù)組的一些常規(guī)方法
- 迭代數(shù)組:
for X in array
/// for 循環(huán)函數(shù)
let array = [1,2,3,5];
for x in array {
print(x);
}
- 迭代除去第一個元素以外的部分元素
for X in array.dropFirst();
/// 除去第一個值勿负,遍歷其他的值
for x in array.dropFirst() {
print(x);
/**2 3 5*/
}
- 迭代除去最后幾個元素后的其他元素 :
for X in array.dropLast(2)
/// 除去最后3個數(shù)之后馏艾,遍歷其他的值
for x in array.dropLast(2) {
print(x);
/** 1 2 */
}
- 迭代數(shù)組中的元素和對應的小標 :
for (index ,X) in array
for (index,x) in array.enumerated() {
print("第" + "\(index)" + "個,值為" + "\(x)");
}
/**第0個,值為1 第1個,值為2 第2個,值為3 第3個,值為5*/
first
和last
屬性都是返回的可選值
,如果數(shù)組為空。返回的就是nil
奴愉。
當數(shù)組為空的時候琅摩,就不可以使用removeLast
,會造成崩潰锭硼。但是popLast將在數(shù)組不為空的時候恋日,移除掉最后一個值圃验,并返回它觉吭,如果數(shù)組為空坎怪,則不做任何操作。
3.map 操作
map鳖擒,是將數(shù)組中的每一個元素都做一次
指定操作
之后溉浙,返回一個新的數(shù)組,注意:返回的數(shù)組是在map
里面新創(chuàng)建的一個數(shù)組
/// a 表示遍歷元素 Int表示返回數(shù)組里面的元素的類型
let aa = array.map { (a) -> Int in
a-2;
}
print(aa);
/// map 數(shù)組遍歷后,并操作后的數(shù)據(jù)組成數(shù)組返回出去
let bb = array.map { x in
x*x;
}
print(bb);
let cc = array.map { $0-3};
print(cc);
/// map 源碼
func map<T>(_ transform:(Element)->T) -> [T] {
var result:[T] = [];
result.reserveCapacity(count);
for X in self {
result.append(transform(X));
}
return result;
}
4.filter 操作
- 檢查一個數(shù)組蒋荚,將數(shù)組中滿足要求的元素過濾出來戳稽,并將它們組裝成一個新的數(shù)組,返回出去
array.filter { $0 % 2 == 0 } /// [2,4,6,8]
/// 如果你喜歡寫
array.filter { $0 % 2 == 0 }.count > 0
建議以后別寫了,在filter里面會寫創(chuàng)建一個數(shù)組的惊奇,其實我們只知道是否滿足條件的元素而已互躬,
不需要創(chuàng)建新的數(shù)組,我們可以使用`contains`來實現(xiàn)的
/// filter 源碼
func filter(_ isIncluded:(Element)->Bool) -> [Element] {
var result:[Element] = [];
for X in self where isIncluded(X) {
result.append( X);
}
return result;
}
5.contains 操作
contains 將數(shù)組里面的元素颂郎,進行一次
指定的操作
吼渡,當滿足指定要求
時就會結(jié)束,并返回true
乓序,并結(jié)束迭代
let arrayC = [1,2,3,8,5,6,7];
print(arrayC.contains{ $0 % 2 == 0 }); /// true
arrayC.contains { x in
x % 2 == 0;
}
6 flatMap 操作
flatMap 是將數(shù)組的元素寺酪,進行一個
指定操作(此操作必須返回一個數(shù)組)
,并將返回的數(shù)組合并成為一個新的數(shù)組。
2.也可以將兩個數(shù)組替劈,通過一定的操作后寄雀,合并成為一個數(shù)組。操作如下陨献,將一個數(shù)組進行map
盒犹,一個數(shù)組進行flatMap
。
注意:flatMap
添加元素方式使用的是append(contentsOf:)
而不是append(_:)
,所以制定操作
返回的必須是數(shù)組
arrayA.flatMap(testArray)
/// 創(chuàng)建一個指定操作
func testArray(X:Int)->[Int]{
return [X * X];
}
/// 組合兩個數(shù)組里面的元素
let arrayD = ["J","Q","K","A"];
let arrayE = ["?","?","?","??"];
let arrayH = arrayD.flatMap { D in
arrayE.map({ E in
(D,E);
});
};
//// [("J", "?"), ("J", "?"), ("J", "?"), ("J", "??"), ("Q", "?"), ("Q", "?"), ("Q", "?"), ("Q", "??"), ("K", "?"), ("K", "?"), ("K", "?"), ("K", "??"), ("A", "?"), ("A", "?"), ("A", "?"), ("A", "??")]
/// flatMap 源碼
extension Array {
func flatMap<T>(_ transform:(Element)->[T]) -> [T] {
var result:[T] = [];
for X in self {
result.append(contentsOf: transform(X));
}
return result;
}
7眨业,forEach 的進行迭代
forEach
其實就是和for
循環(huán)一樣急膀,都是遍歷數(shù)組,并且對數(shù)組元素進行操作龄捡。值得注意使用forEach
遍歷時候卓嫂,不能像for
循環(huán)那樣添加條件語句進行return
操作
forEach
,里面的return
操作只是返回到閉包的外面,而不能返回到外部函數(shù)作用域之外
arrayA.forEach{print($0)};/// 1,4,3,6
// 1 4
for X in arrayA {
print(X);
if X == 4 {return}
}
/// 1 4 3 6
arrayA.forEach { X in
print(X)
if X == 4 {return}
}
/// `forEach`,里面的`return`操作只是返回到閉包的外面聘殖,而不能返回到外部函數(shù)作用域之外
以后七秒會在文章里面推薦開發(fā)破解軟件
Charles是一款用于HTTP信息抓包工具命黔,可以快速有效的獲得HTTP信息,非常利于開發(fā)者的網(wǎng)頁開發(fā)和調(diào)試修改等就斤!Charles 有著可視化的操作界面,非常利用編輯者的使用和調(diào)試蘑辑!下載地址 密碼:cxp5
如由錯誤洋机,請下方評論,七秒立即更正洋魂,如果你想要什么破解軟件绷旗,也是可以在下方留言,七秒幫你尋找