제목이 의미가 있기를 바랍니다.컬렉션의 하위 컬렉션에서 부울 AND 문자열 검색 수행 (비 LINQ)
는 내가 검색하고 모두가 적어도 한 번 Item
의의 SubItems
의에서 나타나야합니다 keywords
의 집합을 기반으로의 부분 집합을 선택합니다 items
의 집합을 가지고있다. 이 쉽게 LINQ를 사용하여 얻을 수 있다고 생각하지만이 프로젝트에 .NET 2.0을 사용하고 있습니다.
아래 코드는 AllBitsAreSet
이 구현되었다고 가정하고 내가하고 싶은 것을 거의 달성해야합니다. 그러나이 대안을 사용하지 않는 간단한 방법이 궁금합니다.
BitArray
의 모든 비트가 설정되어 있는지 확인하는 좋은 방법이 아닌 것 같기 때문에 모두를 반복하면서 (제발 저에게 말해주세요!), "좋네요" 대안. 필자는 아래 코드가 내가 사용하고있는 데이터 세트에 비해 너무 느리다는 것을 의심 할 여지가 없으므로 더 효율적인 CPU는 아닐 것이다.
public List<Item> Search(Item[] items, List<string> keywords)
{
List<Item> results = new List<Item>();
BitArray flags = new BitArray(keywords.Count);
foreach (Item item in items)
{
flags.SetAll(false);
foreach (SubItem subItem in item.SubItems)
{
for (int i = 0; i < keywords.Count; i++)
{
if (subItem.StringValue.IndexOf(keywords[i]) >= 0)
flags[i] = true;
}
}
if (AllBitsAreSet(flags)) results.Add(item);
}
return results;
}
에 따라
.Contains()
에==
을 변경? 내부 루프 (int i = 0의 경우)는 나에게 문제가된다. – shahkalpesh샘플 입력/예상 출력을 제공하면 더 좋을 것입니다. – shahkalpesh