微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 如何在swift中获取2数组的常见元素列表

我有2个数组:
fruitsArray = ["apple","mango","blueBerry","orange"]
vegArray = ["tomato","potato","blueBerry"]

如何获取这两个数组中的常用项目列表

ouptput = ["mango","blueBerry"]

我不能使用if(array,string),因为我想比较2个数组.
请帮忙

解决方法

你不需要一套(如上面提到的注释).

您可以使用一般的功能,类似于苹果在其Swift Tour中使用的功能,因此避免投射:

func anyCommonElements <T,U where T: SequenceType,U: SequenceType,T.Generator.Element: Equatable,T.Generator.Element == U.Generator.Element> (lhs: T,rhs: U) -> Bool {
    for lhsItem in lhs {
        for rhsItem in rhs {
            if lhsItem == rhsItem {
                return true
            }
        }
    }
    return false
}

函数可以使用任何两个数组(SequenceTypes),如果它们的任何元素相同,则返回true.

你可以简单地修改这个泛型函数来打包一个字符串数组,然后返回.

例如:

func arrayOfCommonElements <T,rhs: U) -> [T.Generator.Element] {
    var returnArray:[T.Generator.Element] = []
    for lhsItem in lhs {
        for rhsItem in rhs {
            if lhsItem == rhsItem {
                returnArray.append(lhsItem)
            }
        }
    }
    return returnArray
}

这样的用法

var one = ["test2","dog","cat"]
var other = ["test2","cat","dog"]


var result = arrayOfCommonElements(one,other)

print(result) //prints [test2,dog,cat]

这里增加的好处是这个函数也可以用于所有相同类型的数组.所以后来如果你需要比较两个[myCustomObject]数组,一旦它们都符合相当的,你就全部设置好了! (双关语)

编辑:(对于非常见的元素),你可以这样做

func arrayOfNonCommonElements <T,rhs: U) -> [T.Generator.Element] {

    var returnArray:[T.Generator.Element] = []
    var found = false

    for lhsItem in lhs {
        for rhsItem in rhs {
            if lhsItem == rhsItem {
                found = true
                break
            }
        }

        if (!found){
            returnArray.append(lhsItem)
        }

        found = false
    }
    for rhsItem in rhs {
        for lhsItem in lhs {
            if rhsItem == lhsItem {
                found = true
                break
            }
        }

        if (!found){
            returnArray.append(rhsItem)
        }

        found = false
    }
    return returnArray
}

这个实现是丑陋的.

原文地址:https://www.jb51.cc/iOS/329635.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐