일련의 문자를 사용하여 문자열 목록을 검색하고 순서에 관계없이 일치하는 항목을 찾고 싶습니다. 예를 들어 내 목록주문하지 않음
List<string> testList = new List<string>() { "can", "rock", "bird" };
내가 "IRB"을 사용하여 검색 할 수있는과 조류를 반환이 포함 된 경우. 나는이 일을 가장 효율적으로 수행 할 수 있도록 여러 번해야한다.
일련의 문자를 사용하여 문자열 목록을 검색하고 순서에 관계없이 일치하는 항목을 찾고 싶습니다. 예를 들어 내 목록주문하지 않음
List<string> testList = new List<string>() { "can", "rock", "bird" };
내가 "IRB"을 사용하여 검색 할 수있는과 조류를 반환이 포함 된 경우. 나는이 일을 가장 효율적으로 수행 할 수 있도록 여러 번해야한다.
var query = "irb";
List<string> testList = new List<string>() { "can", "rock", "bird" };
var result = testList.Where(i => query.All(q => i.Contains(q)));
을 testList
시험의 각 항목에 대해보고 당신은 상관하지 않는 경우가 query
당신은 당신이 또한 ToUpper
를 사용하는 경우를 비교하고는 string
당신이 시나리오에 대한 UpperCase
, 당신은 확인해야 할도 비교할이
List<string> testList = new List<string>() { "can", "rock", "bird" };
var lst = testList.Where(x => x.ToUpperInvariant().Contains("IRD")).ToList();
확인 달성하기 위해 LINQ를 사용할 수 있습니다 단어의 또 다른 목록에있는 단어의 각 문자. 이를 위해
, 다음과 같이 할 수 있습니다
// Checks whether all character in word is present in another word
Func<string, string, bool> isContain = (s1, s2) =>
{
int matchingLength = 0;
foreach (var c2 in s2.ToCharArray())
{
foreach (var c1 in s1.ToCharArray())
{
if (c1 == c2)
++matchingLength;
}
}
// if matched length is equal to word length given, it would be assumed as matched
return s2.Length == matchingLength;
};
List<string> testList = new List<string>() { "can", "rock", "bird" };
string name = "irb";
var fileredList = testList.Where(x => isContain(x, name));
의 모든 문자가 포함 된 경우 검색하는 시퀀스의 모든 문자가 단어에 포함되어 있는지 확인하는 것보다 중복을 비교하는 것이 술어에 대해 수행 할 수 있습니다.
"irb".Except("bird").Count() == 0
그리고 전체 조건:
List<string> testList = new List<string>() { "can", "rock", "bird" };
var search = "irb";
var matches = testList.Where(word => !search.Except(word).Any());
참고 :
search.All(c => wordAsHashSet.Contains(c))
을 조건으로 사용하십시오.
문자가 검색 단어에 나타나는 순서와 동일한 순서로 검색되는 경우에만 찾습니다. 나는 타입을 말하고 싶습니다 또는 바위를 가져 오십시오 – jsomers89
나는 쌍을 사용하여 검색해야 할 것 같아요. – Mairaj
@ jsomers89 일치하는 단어가 어떻게 나타날지 한 가지. 나는'또는'단어를 어떻게 매치시키는지를'rk'처럼 보일 수 있다는 것을 의미합니까? – Mairaj