簡體   English   中英

檢查字符串是否以任何順序包含特定字符

[英]Check if a string contains particular characters in any order

我可以解釋我想做的最好的方法是舉一個例子:

我的數據庫中有一個字符串StackOverflow ,當用戶鍵入OAW我想返回該字符串以及包含任何順序的這三個字符的任何其他單詞。

我嘗試過使用各種LINQ / Lambda表達式,但無濟於事。

query.Where(a => a.SerialNumber.Contains(a));

在SO上找到了一篇與我的帖子類似的帖子,但它使用Java。

我覺得我想做的事情非常容易實現,但是我只是想念它。 任何幫助將不勝感激。

您可以嘗試這樣的事情:

query.Where(str => value.All(str.SerialNumber.Contains));

在這里,對於數據庫中的任何單詞,您都檢查str.SerialNumber是否包含value OAW (使用All擴展方法)的All str.SerialNumber

更新資料

這個

str.SerialNumber.Contains

等效於以下lambda表達式:

x => str.SerialNumber.Contains(x)

x表示我們應用All的序列中的隨機元素。 換句話說就是value的隨機性。

您可以使用ContainsAll類型的函數。

public static bool ContainsAllItems(IEnumerable<T> a, IEnumerable<T> b)
{
    return !b.Except(a).Any();
}

注意

該功能是從這里借來的

您可以通過稍微修改代碼來做到這一點:

public bool DoesContain(char[] identifiers, string containingString)
{
    return !identifiers.Except(containingString.ToCharArray()).Any();
}

要么:

private char[] identifiers = { /* Your identifiers*/ };

public bool DoesContain(string containingString)
{
    return !identifiers.Except(containingString.ToCharArray()).Any();
}

如果傳遞的字符串包含任何指定字符,則這些方法中的任何一個都將返回true。

注意:

Cameron MacFarland 對此問題的解決方案。

看起來您可以進行多個比較和&&,或者使用正則表達式。 我更喜歡前者,這是一個簡單的示例:

arrOfCharacters.All(a.SerialNumber.Contains)

盡管您可能需要使用ToUpperInvariant()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM