HashSet을 살펴보고 요소를 저장 (HashSet에서 요소를 제거하거나 아무 작업도 수행하지 않음)하는 (복잡한) 확인을하고 싶습니다.해시 셋을 열거하고 요소를 삭제하십시오.
foreach 루프를 사용하면 HashSet을 변경할 수없고 인덱스를 사용할 수 없기 때문에 HashSet을 먼저 복사하거나 여러 LINQ 연산을 적용하여 느린 작업을 수행하지 않아도 작업 수행 방법을 알 수 없습니다 한 번 이상 HashSet).
제안 사항?
HashSet을 살펴보고 요소를 저장 (HashSet에서 요소를 제거하거나 아무 작업도 수행하지 않음)하는 (복잡한) 확인을하고 싶습니다.해시 셋을 열거하고 요소를 삭제하십시오.
foreach 루프를 사용하면 HashSet을 변경할 수없고 인덱스를 사용할 수 없기 때문에 HashSet을 먼저 복사하거나 여러 LINQ 연산을 적용하여 느린 작업을 수행하지 않아도 작업 수행 방법을 알 수 없습니다 한 번 이상 HashSet).
제안 사항?
RemoveWhere()을 적절한 술어 기능과 함께 사용해야합니다.
필요하다면 검사 할 요소를 복사하는 조건 자의 부작용을 가질 수 있습니다 ("요소 저장"으로 가정 함). 어쩌면 그게 좀 해킹 된 것처럼 들리 겠지만, 생각보다 잘 작동 할 것입니다.
당신의 술어 함수가 정의되지 않은 순서로 HashSet의 각 요소되게되기 때문 작동, 따라서 당신은 그것을 삭제 true
을 반환뿐만 아니라, 각 요소와 함께 할과 false
그것을 유지하기 위해 무엇을 결정할 수 있습니다.
[편집] 다음은 코드 샘플입니다.
using System;
using System.Collections.Generic;
namespace Demo
{
public class Program
{
[STAThread]
private static void Main(string[] args)
{
var hashSet = new HashSet<int> {4, 0, 6, -1, 23, -8, 14, 12, -9, 5, 2};
var itemProcessor = new ItemProcessor();
hashSet.RemoveWhere(itemProcessor.Process);
Console.WriteLine("Max = {0}, Min = {1}", itemProcessor.Max, itemProcessor.Min);
Console.WriteLine("\nHashSet contents:");
foreach (int number in hashSet)
{
Console.WriteLine(number);
}
}
}
public sealed class ItemProcessor
{
private int max = int.MinValue;
private int min = int.MaxValue;
// Removes all negative numbers and calculates max and min values.
public bool Process(int item)
{
max = Math.Max(item, max);
min = Math.Min(item, min);
return (item < 0);
}
public int Max { get { return max; } }
public int Min { get { return min; } }
}
}
'요소 저장'어디에서 요소를 저장 하시겠습니까? 당신이 아무 것도하지 않을 때 해시 셋에 저장된 *라고 가정합니다. –
아니요, 여러 최적화 절차에서 HashSet의 "최상"요소를 찾아서 저장하고 싶습니다. 이미 여러 단계의 절차를 거쳐 이미있는 모든 요소를 삭제합니다 가능한 가장 좋은 값을 초과했습니다. –