내 프로젝트에 List<T>
을 사용하고 있는데이 목록에는 수백 개의 항목이 들어 있습니다. List.Contains 메서드를 많이 사용하고 있는데 성능이 좋지 않습니다. 목록을 사전으로 바꾸었지만 메모리 병목 현상이 발생하여 성능이 최악이되었습니다. 목록에서 검색 할 때 제안 할 수있는 더 나은 솔루션이 있습니까? HashSet<T>
이 C# 2.0 또는 메모리와 속도가 현명한 다른 방법으로 대체 되었습니까?C# 2.0의 HashSet 대체
7
A
답변
0
.Net 3.5 프레임 워크를 설치해야하는 경우 2.0 프로젝트에서 .Net 3.5 (System.Core.dll)의 HashSet을 사용할 수 있습니다.
이 질문을 참조하십시오 : 그것은 더 이동 없다면 Using HashSet in C# 2.0, compatible with 3.5을, 내가 대신 사전을 사용할 수 있습니다.
6
Dictionary<T,bool>
이 HashSet<T>
대신 사용될 수 있습니다. True 또는 False 값을 가진 항목을 추가 할 때 동전 던지기 여부와 상관없이 값은 적합하지 않습니다.
HashSet<T>
보다 성가 시며 꽤 가벼운 것은 아니지만 확실히 List<T>
보다 좋습니다.
3
public class HashCollection <T> : ICollection <T>
{
private Dictionary<T, bool> _innerDictionary;
public HashCollection()
{
_innerDictionary = new Dictionary<T, bool>();
}
void ICollection <T>.Add(T item)
{
AddInternal(item);
}
private void AddInternal(T item)
{
_innerDictionary.Add(item, false);
}
public bool Add(T item)
{
if (_innerDictionary.ContainsKey(item))
return false;
AddInternal(item);
return true;
}
public void Clear()
{
_innerDictionary.Clear();
_innerDictionary = new Dictionary<T, bool>();
}
public bool Contains(T item)
{
return _innerDictionary.ContainsKey(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
_innerDictionary.Keys.CopyTo(array, arrayIndex);
}
public int Count
{
get { return _innerDictionary.Keys.Count; }
}
public bool IsReadOnly
{
get
{
return false;
}
}
public bool Remove(T item)
{
return _innerDictionary.Remove(item);
}
public IEnumerator<T> GetEnumerator()
{
return _innerDictionary.Keys.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
+0
이것은 나를 위해 잘 작동합니다! 고맙습니다! – Smartis
관련 문제
- 1. C# 목록으로의 변환 Hashset
- 2. 3.5와 호환되는 C# 2.0에서 HashSet 사용
- 3. Objective-C 2.0의 도트 연산자
- 4. .Net 2.0의 C# 3.0 호환성
- 5. HashSet 조회 복잡성?
- 6. 순서를 유지하는 HashSet
- 7. HashSet 이클립스 디버거 변수
- 8. C# 2.0의 Word 2007 문서 속성 저장
- 9. C# 2.0의 XML 파일을 확인하는 방법
- 10. Objective-C와 Objective-C 2.0의 차이점
- 11. Json.net에서 C# .net 2.0의 개체 목록에 deseralize
- 12. WPF에서 ObservableCollection과 함께 HashSet 사용
- 13. 관련 레코드가 HashSet 또는 SortedSet에로드됩니까?
- 14. HashSet, Vector, LinkedList의 최대 크기
- 15. 그놈 대체 애플릿 C++
- 16. HashSet에서 대체 비교 사용
- 17. Java Collections API HashSet 제거 방법
- 18. RSS 2.0의 항목에 이미지를 추가하려면 어떻게합니까?
- 19. ADO.NET 2.0의 새로운 기능은 무엇입니까?
- 20. HashSet() 함수 데이터를 순차적으로 정렬하는 방법은 무엇입니까?
- 21. Silverlight 2.0의 데이터 액세스
- 22. .NET 2.0의 Dotfuscator
- 23. ActionScript 2.0의 동적 정렬
- 24. Guice 2.0의 ClassNotFoundException
- 25. ASP.NET 2.0의 가장
- 26. BPEL 2.0의 동적 할당
- 27. ActionScript 2.0의 사운드 시각화
- 28. ASP.NET 2.0의 SmtpClient.SendAsync 버그
- 29. asp.net 2.0의 데이터 표
- 30. nhibernate 1.2와 2.0의 차이
무엇을하려고합니까? 목록 제약 조건은 무엇입니까? 추천을 기반으로해야하는 정보를 제공하지 않았습니다. – Oded
목록 Iam을 사용하고 List.Contains 복잡성은 O (N)이므로 성능이 저하됩니다. –
이 목록에 어떤 종류의 데이터가 있습니까? 수백 가지 항목이 그다지 일반적이지 않습니다. 관계없이, 당신은 당신이 목록으로 무엇을하는지 설명하지 않습니다. '함유'는 아무것도 의미하지 않습니다. – Oded