文档章节

Swift判断二个数组中的所有元素是否相等

阴雨音语
 阴雨音语
发布于 2016/06/13 18:42
字数 566
阅读 636
收藏 0

 


只包含一种元素类型的array是否相同

func arrayIsEqualToASortOfArray(firstArray: NSArray,thenArray: NSArray) -> Bool

一个数组是否包含另一个数组所有元素

func arrayIsContain(firstArray: NSArray,isContainedByArray: NSArray) -> Bool

当数组中元素类型不止一种判断二个数组中的元素是否相等,不能有元素重复

func arrayIsEqual(firstArray: NSArray,thenArray: NSArray) -> Bool


Demo点此

 

//
//  NSArray+Extra.swift
//  判断二个数组中的所有元素是否相等
//
//  Created by codeIsMyGirl on 16/6/13.
//  Copyright © 2016年 codeIsMyGirl. All rights reserved.
//

import Foundation

extension NSObject {
    
    // MARK:
    // MARK: 只包含一种元素类型的array 是否相同
    /// 只包含一种元素类型的array 是否相同
     func arrayIsEqualToASortOfArray(firstArray: NSArray,thenArray: NSArray) -> Bool {
 
        // 当所有元素都是 字符串 类型
        if firstArray[0].isKindOfClass(NSString) {
            
            // 类型转换
            let firstA = firstArray as! [String];
            
            let thenA = thenArray as! [String];

            for i in firstA {
                
                // 如果出现不相等 直接返回
                if thenA.contains(i) == false {
                
                    return false;
                }
            }
            
            // 执行到这里说明全部相等
            return true;
        }
        
        // 当所有元素都是 数字 类型
        if firstArray[0].isKindOfClass(NSNumber) {
            
            // 类型转换
            let firstA = firstArray as! [NSNumber];
            
            let thenA = thenArray as! [NSNumber];
            
            for i in firstA {
                
                // 如果出现不相等 直接返回
                if thenA.contains(i) == false {
                    
                    return false;
                }
            }
            
            // 执行到这里说明全部相等
            return true;
        }
 
        return false;
    }
 
    // MARK:
    // MARK: 一个数组是否包换另一个数组所有元素
    /// 一个数组是否包换另一个数组所有元素
    func arrayIsContain(firstArray: NSArray,isContainedByArray: NSArray) -> Bool {
 
        if firstArray.count > isContainedByArray.count {
            
            print("被包含数组长度小于包含数组长度");
            
            return false;
        }
        
        return publicCode(firstArray, thenArray: isContainedByArray);

    }

    // MARK:
    // MARK: 二个数组中的所有元素是否相等
    /// 用于数组中元素不止一种 判断二个数组中的所有元素是否相等
    func arrayIsEqual(firstArray: NSArray,thenArray: NSArray) -> Bool {
        
        if firstArray.count != thenArray.count {
            
            return false;
        }
        
        return publicCode(firstArray, thenArray: thenArray);
    }
   
}

// MARK:
// MARK: 抽取
extension NSObject {
    
    
    // MARK:
    // MARK: 公用代码
    /// 公用代码
    private func publicCode(firstArray: NSArray,thenArray: NSArray) -> Bool {
        
        let count = firstArray.count;
        
        // 相同的标记
        var rightCount = 0;
        
        for i in 0..<count {
            
            // 获取元素
            let obj = firstArray[i];
            
            // 判断 NSString类型
            if obj.isKindOfClass(NSString) {
                
                for j in thenArray {
                    
                    // 获得所有 相同类型
                    if j.isKindOfClass(NSString) {
                        
                        let thenObj = j as! String;
                        
                        if obj as! String == thenObj {
                            
                            rightCount += 1;
                        }
                        
                    }
                }
                
            }
            
            // 判断 NSNumber类型
            if obj.isKindOfClass(NSNumber) {
                
                for j in thenArray {
                    
                    // 获得所有 相同类型
                    if j.isKindOfClass(NSNumber) {
                        
                        let thenObj = j as! NSNumber;
                        
                        if obj as! NSNumber == thenObj {
                            
                            rightCount += 1;
                        }
                        
                    }
                }
                
            }
            
            
        }
        
        return count == rightCount;
    }
    
}

 

 

© 著作权归作者所有

共有 人打赏支持
阴雨音语
粉丝 55
博文 294
码字总数 43486
作品 0
东城
程序员
从零开始(3)

( 180 ) 根据系统状态栏判断网络状态 详情请点击此 ( 179 ) 仿微信"个人头像" 详情请点击此 ( 178 ) 从相册获取图片,并获取裁剪后图片(系统自带) 详情请点击此 ( 177 ) iOS打开系统相册显示中...

阴雨音语
2016/05/06
72
0
swift官方推荐翻译文档之集合类型

Swift 语言提供、和三种基本的集合类型用来存储集合数据。数组(Arrays)是有序数据的集。集合(Sets)是无序无重复数据的集。字典(Dictionaries)是无序的键值对的集。 Swift 语言中的、和...

哪一种黑
2016/03/10
25
0
Swift讲解专题五——集合类型

Swift讲解专题五——集合类型 一、引言 Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型。Array用于存放一组有序的数据,数据角标从0开始一次递增;Set用于存放一...

珲少
2016/05/11
376
0
关于“幽灵架构”的补充说明4:协议的应用场景与局限性

再次解释一下协议的意义:定义某个功能模块的最小粒度,因为Swift是单继承,而无论是值类型还是引用类型都可以遵守多个协议,因此协议是比父类的粒度还要小的功能模块。协议的功能定义一定要...

cg1991130
2016/05/12
0
0
使用HashSet获取两个List的并集

近日在做项目的过程中,需要将两个List(ArrayList)中的值,按照某个属性值是否相等进行获取并集的操作。而两个List中存放的数据类型完全不相同(一个自定义的类,一个Stirng数组),并且两...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
44分钟前
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
56分钟前
0
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
0
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部