检查列表成员资格的简单方法?

时间:2015-10-01 21:13:20

标签: swift2

用于闭包(虽然我认为它在其他地方也会有用),检查给定元素是否是列表成员(或任何字符是否为成员)的最简洁方法是什么?一个字符串)?

例如,要检查字符串"abcde"是否包含"aeiou"中的任何字符,或列表["bill", "sam" , "suzy"]是否包含["abe", "bill", "charlie"]中的任何名称?

2 个答案:

答案 0 :(得分:2)

Swift数组内置了这个功能的功能。

我建议您从Apple查看official documentation for Collection Types作为起点。

以下是您的问题后面的示例:

// With [Character]
let vowels: [Character] = ["a", "e", "i", "o", "u"]
let chars: [Character] = ["a", "b", "c", "d", "e"]
let resultVowels = vowels.filter { chars.contains($0) }
resultVowels.count // == 2
resultVowels.description // == "[a, e]"

// With [String]
let people = ["Bill", "Sam", "Suzy"]
let peeps = ["Abe", "Bill", "Charlie"]
let resultPeople = people.filter { peeps.contains($0) }
resultPeople.count // == 1
resultPeople.description // == "[Bill]"

结果将是匹配的名称(或数字,字符等)。因此,您不仅可以获得计数,还可以获得此过程中的比较内容。只要类型遵循Equatable,这将适合您。 如果你想返回一个布尔值,只需:

return filteredArray.count != 0

现在,如果你想比较say,[Character]和String,那么:

let vowels: [Character] = ["a", "e", "i", "o", "u"]
let someString = "abcde"
let result = vowels.filter { someString.characters.contains($0) }
result.count // == 2
result.description // == "[a, e]"

String.characters属性是Swift 2引入的新功能。

我希望我能够帮助你。

答案 1 :(得分:2)

1)2个字的常见字符

使用Set结构:

轻松检查2个字符串中的常用字符的交集
let set0 = Set("abcde".characters)
let set1 = Set("aeiou".characters)

let intersection = set0.intersect(set1) // {"e", "a"}

2)2个列表中的常用词

同样,您可以找到2个字符串数组的交集:

let set0 : Set = ["bill", "sam", "suzy"]
let set1 : Set = ["abe", "bill", "charlie"]

let intersection = set0.intersect(set1) // {"bill"}

3)返回数组

请注意,在这两个示例中,intersection常量为Set。您可以将其转换为数组写入:

let list = Array(intersection)

希望这有帮助。

P.S。此代码适用于Swift 2.0

更新

更具体地说,如果你想知道是否存在交叉点,你可以简单地写:

 !intersection.isEmpty