我比较两个单词中包含的字符。在寻求实现这一目标时,Set
(又名NSSet
)似乎是完成此任务的方法。我发现它会在匹配项上返回误报,因此我尝试使用CountedSet
(又名NSCountedSet
)。
我能够毫无问题地初始化Set
,但我无法使CountedSet
初始化程序正常工作。这就是我所做的......
我从String
开始:
// Let's say myTextField.text = "test"
let textFieldCharacters = myTextField.text?.characters
// word is a string from the ENABLE list of words
let wordCharacters = word.characters
然后我将字符转储到Array
:
var wordCharactersArray = [Character]()
for character in wordCharacters {
wordCharacterArray.append(character)
}
var textFieldCharactersArray = [Character]()
for character in textFieldCharacters {
wordCharacterArray.append(character)
}
然后我从字符数组中创建一个Set
:
let textFieldSet = Set<Character>(textFieldCharactersArray)
let wordSet = Set<Character>(wordCharactersArray)
最后,我测试textFieldSet
是否是wordSet
的超集,并带有以下内容:
textFieldSet.isSuperset(of: wordSet)
回到我的示例,如果myTextField.text
是&#34;测试&#34;,则我返回word
的值,其中wordSet
的字符是myTextField.text
的超集,但个别元素的数量与CountedSet
在研究我的问题时,我发现了NSCountedSet
(fka public convenience init(array: [AnyObject])
public convenience init(set: Set<NSObject>)
),我认为这会解决我的问题。它有两个方法签名:
let textFieldSet = CountedSet(array: textFieldCharacterArray)
let wordSet = CountedSet(array: wordCharacterArray)
我已尝试初始化两组字符,如下所示:
let textFieldSet = CountedSet(array: textFieldCharacterArray as! [AnyObject])
我为集合
收到以下错误无法转换类型&#39; [字符]&#39;的值预期的参数类型 &#39; [AnyObject]&#39;
所以我尝试像这样初始化集合:
CountedSet
产生以下错误:
&#39; AnyObject&#39;不是&#39;字符&#39;
的子类型
我还尝试按照方法签名初始化Set
CountedSet
,但是当我尝试这样做时,我也会遇到错误。
任何有关如何初始化<html>
<head>
<title>jquery each test</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<script type="text/javascript">
var arr = ["One", "Two", "Three", "Four", "Five"];
var task = "";
$(document).ready(
$.each(arr, function(index, value) {
task += value + "<br>";
$('div.content').html(task);
}));
</script>
</head>
<body>
<div class="content"></div>
</body>
</html>
的建议都将非常感谢。
答案 0 :(得分:1)
你是正确的,如果你不仅要比较元素的呈现而且还需要比较它们的数量,你应该使用CountedSet
,这是一个重命名为NSCountedSet
的swift 3.0。您遇到的问题是CountedSet
只能接受作为对象的元素而Characters
不能接受。正如Eric D在他们的评论中指出的那样,解决这个问题的简单方法是将[Character]
映射到[String]
,这将与[NSString]
联系起来。
您没有使用Set
遇到此问题,因为它是使用任何类型的元素初始化的本机Swift集合类型。这就是您可以使用Set
初始化[Character]
。
要看到差异:
let word = "helo"
let wordCharacters = Array(word.characters)
let wordSet = Set(wordCharacters)
let wordCharStrings = wordCharacters.map{String($0)}
let wordCountedSet = CountedSet(array: wordCharStrings)
let textField = "hello"
let textFieldCharacters = Array(textField.characters)
let textSet = Set(textFieldCharacters)
let textFieldCharStrings = textFieldCharacters.map{String($0)}
let textFieldCountedSet = CountedSet(array: textFieldCharStrings)
textFieldCountedSet.isSubset(of: wordCountedSet as! Set<NSObject>) // returns false, but if word had two or more l's it would return true
textSet.isSubset(of: wordSet) // returns true