《Swift NSDictionary 的详细使用和部分方法介绍 和 哈希表(散列)的阐述和解释 》

前端之家收集整理的这篇文章主要介绍了《Swift NSDictionary 的详细使用和部分方法介绍 和 哈希表(散列)的阐述和解释 》前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

/*

Swift NSDictionary 的详细使用和部分方法介绍 哈希表(散列)的阐述和解释

*/

/*

第一步:我们首先,必须了解一个概念性的东西那就是:哈希 (也称散列)

1)哈希的主要解释是:

哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进

制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而

且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的

两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用

快速查找和加密算法

2)从解释中你能得到什么重要的信息,我得到的是

1》哈希值是可以将一个任意长的二进制转化为一个固定长度的二进制。

2》哈希列表是跟进式变化的。

3》使用途径:快速查找和加密

3 对于哈希快速查找,是面试的时候,也有问道的时候(只是,在面是的时候,不

是直接问的,本人在去(爱奇艺)面试的时候,领略过)。

针对快速查找进行根本的回答:

哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地

址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或

散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈

希表无疑是查找速度比较快的一种。

注意:

这是将(key)作为一个哈希表或者散列(亲,你不要看错了)。

哈希方法- 值对的存储位置与它的键之间建立一个确定的对应函数关系 hash()

使得每一个键与结构中的一个唯一的存储位置相对应:存储位置=hash( )搜索时,首

先对键进行hash 运算,把求得的值当做 - 值对的存储位置,在结构中按照此位置

- 值对进行比较,若键相等,则表示搜索成功。在存储 - 值对的时候,依照

相同的 hash 函数计算存储位置,并按此位置存放,这种方法就叫做哈希方法,也叫做散

方法。在哈希方法中使用的转换函数 hash 被称作哈希函数 ( 或者散列函数 ) 。按照

此中算法构造出来的表叫做哈希表 ( 或者散列表 )

哈希函数建立了从- 值对到哈希表地址集合的一个映射,有了哈希函数,我们就可

以根据键来确定 - 值对在哈希表中的位置的地址。使用这种方法由于不必进行多次键

的比较,所以其搜索速度非常快,很多系统都使用这种方法进行数据的组织和检索。

举一个例子,有一组键值对<5,” tom ” > <8,” Jane ” > <12,”

Bit ” > <17,” Lily ” > <20,” sunny ” >,我们按照如下哈希函数对键进

行计算 :hash(x)=x%17+3 ,得出如下结果: hash(5)=8 hash(8)=11

hash(12)=15 hash(17)=3 hash(20)=6 。我们把 <5,

” Jane ” > <12,” Bit ” > <17,” sunny ” >分别

放到地址为 8 11 15 3 6 的位置上。当要检索 17 对应的值的时候,只

要首先计算 17 的哈希值为 3 ,然后到地址为 3 的地方去取数据就可以找到 17 对应的

数据是“ Lily ”了,可见检索速度是非常快的。


你们理解了吗?????

第二部:我们就要进行字典介绍,我们看代码。如下:

// Created by 周双建 on 15/12/30.

// Copyright © 2015 周双建. All rights reserved.

//


import UIKit


class ViewController: UIViewController {


override func viewDidLoad() {

super.viewDidLoad()

/***********************************************************/

// 字典的介绍

/*

字典是用来保存同种类型的容器,容器中的数据是无序存在的(数组是有序的)

*/

// 字典的声明方式

// 第一种

var dict1 = ["A":"I","B":"Y","C":"A","D":"SB"]

// 输出字典

print("\(dict1["A"])\(dict1["B"])\(dict1["C"])\(dict1["D"])")

// 输出Optional("I")Optional("Y")Optional("A")Optional("SB")


// 第二种

var dict2:Dictionary<String,String> = [:]

// 进行赋值

dict2 = ["2": "sv"]

print(dict2)

// 输出 ["2": "sv"]

// 第三种

var dict3 = Dictionary <String,String> ()

// 赋值

dict3 = ["zsj":"hjk"]

//输出

print(dict3)

//输出 ["zsj": "hjk"]

// 第四种

var dict4 = [String:String]()

// 赋值

dict4 = ["2":"df"]

// 打印

print(dict4)

// 输出 ["2": "df"]


/************************************************************/

// 获取字典里数据的个数

let 个数:Int = dict1.count

// 打印获取结果

print(个数)

// 输出 4


/*************************************************************/

// 字典元素的访问

let Cell1 = dict1["A"]

print(Cell1)

// 输出 Optional("I")


// 我们在访问一个不存在的元素

let Cell2 = dict1["GHJ"]

print(Cell2)

// 输出 nil

// 注意: 如果查询key 是不存在的。那么得到的对象是 nil (注意类型)

// 字典元素的增加

var dict5 = ["A":"1","B":"2"]

// 增加另外的元素 (还有另一个方法:是在修改数据里往下看)

dict5["C"] = "3"

// 打印

print(dict5)

// 输出 ["C": "3","B": "2","A": "1"] // 增加到第一个位置了

/**************************************************************/

// 字典元素的数据更改

// 第一种

dict5["A"] = "250"

// 打印

print(dict5)

/*

输出 ["C": "3","A": "1"]

["C": "3","A": "250"]

*/

// 第二种

dict5.updateValue("250",forKey: "B")

// 输出 ["C": "3",0)"> ["C": "3","B": "250",0)"> // 第三中 (测试也是增加

dict5.updateValue("250",forKey: "BJ")

// ["B": "250","A": "250","BJ": "250","C": "3"]

注意:这里可以看出字典是无序的,也可增加元素

*/

/************************************************************/

// 字典元素的删除

// 第一种:有指定key 删除

dict5.removeValueForKey("BJ")

// 输出 ["B": "250","C": "3"]

["B": "250",0)"> */

// 第二种 移除指定哈希位置的删除

// 首先声明一个 DictionaryIndex 对象

let index : DictionaryIndex = dict5.indexForKey("B")!

// 开始移除

dict5.removeAtIndex(index)

// 输出 ["B": "250",0)"> ["A": "250",0)"> // 第三种 有两种方式,结果一样,但是意义不一样

dict5.removeAll()

dict5.removeAll(keepCapacity: true)

dict5.removeAll(keepCapacity: false)

// // 输出 [:]

/**********************************************************/

//字典的便利

for (key,value) in dict1 {

print("key:\(key) and value:\(value)")

}

/*

输出

key:B and value:Y

key:A and value:I

key:C and value:A

key:D and value:SB


*/

// 获取字典的所有 Key

for str in dict1.keys {

print(str)

}

/*

B

A

C

D

// 获取字典的所有values

for str in dict1.values {

print(str)

}

/*

Y

I

SB

*/

// 这也可以判断字典是否为空

print( dict1.isEmpty )

// 获取容器顶部数据

print(dict1.popFirst())


}


override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}



}

猜你在找的Swift相关文章