文档章节

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

宁音雨雾
 宁音雨雾
发布于 2016/06/13 18:42
字数 566
阅读 1094
收藏 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
博文 312
码字总数 48631
作品 0
东城
程序员
私信 提问
从零开始(3)

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

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

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

哪一种黑
2016/03/10
44
0
【译】Swift算法俱乐部-线性搜索

本文是对 Swift Algorithm Club 翻译的一篇文章。 Swift Algorithm Club是 raywenderlich.com网站出品的用Swift实现算法和数据结构的开源项目,目前在GitHub上有18000+⭐️,我初略统计了一下...

Andy_Ron
2018/09/19
0
0
Swift讲解专题五——集合类型

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

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

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

cg1991130
2016/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
11分钟前
3
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
22分钟前
1
0
jenkins 插件下载加速最终方案

推荐做法 1、告诉jenkins 我哪些插件需要更新 jenkins插件清华大学镜像地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 1.进入jenkins系统管理 2.进入插件管...

vasks
28分钟前
3
0
composer爆错:zlib_decode():data error

解决办法:先用 composer diagnose 命令检测 然后 composer self-update 更新composer版本 最后执行 composer update 或者 composer install composer 切换阿里云镜像 用起来还快 composer c...

koothon
35分钟前
3
0
shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部