我有一个名为dictionaryWords的对象的集合。
对于此集合中的每个单词,我需要检查它是否包含某些字母。如果它确实包含一个或多个某个字母,则会将其从集合中删除。
示例:
Collection before removal: ['abc','dee',fff']
letters to check for: e,f
Collection after removal: ['abc']
而不是指定多个字母是否有办法检查数组?
我的代码:
foreach(DictionaryWord word in dictionaryWords)
{
if (!word.Contains("D") && !word.Contains("E") // optimize this line
{
// Word does not contain letters, word is good
}
}
如何更换“优化此行”以说“如果word包含来自值数组的任何字母”
谢谢, 安德鲁
答案 0 :(得分:3)
尝试这样的事情:
// isolate the letters
string[] letters = new string[] { "D", "E", "F" }; // other strings or letters
// interate between your data
foreach(DictionaryWord word in dictionaryWords)
{
// check if the work does not contain any letter
if (!letters.Any(x => word.Contains(x))
{
// Word does not contain letters, word is good
}
}
答案 1 :(得分:1)
为什么不将它抽象出函数?
void CheckForLetters(IEnumerable<DictionaryWord> source, IEnumerable<char> letters) {
foreach (var word in source) {
if (letters.any(c => word.Contains(c)) {
// It has the letter
}
}
}
答案 2 :(得分:0)
创建一个接受要比较的字符数组的方法。
原型如下所示:bool isLetterInWord(DictionaryWord word, char[] letters);
答案 3 :(得分:0)
假设您可以将DictionaryWord
类映射到字符串,可以使用Linq查询:
var words = new string[] { "abc", "def", "fe" };
var lettersToExclude = new char[] { 'e', 'f' };
var goodWords = from x in words where !lettersToExclude.Intersect(x).Any() select x;
答案 4 :(得分:0)
使用HashSets并使用IsSubsetOf方法
http://msdn.microsoft.com/en-us/library/bb358446(v=vs.110).aspx
string str = "teststing";
var strset = new HashSet<char>(str.ToCharArray());
var charstoCheck = new HashSet<char>(new Char[] {'z'});
bool isstrcontainschars = charstoCheck.IsSubsetOf(strset);
答案 5 :(得分:0)
您可以使用Regex
。
string value = "abcdef";
var result = new Regex("[d-e-f]").Replace(value, string.Empty);
它检查字符串是否包含Regex构造函数中的字母,并替换所需字母。在我的示例中,我将该字母替换为string.Empty
。
在你的情况下,你可以这样做:
if (new Regex("[d-e-f]").IsMatch(word))
{
//Do something.
}