Wystarczy użyć RemoveWhere() z odpowiednią funkcją predykatu.
Możesz mieć efekt uboczny swojego predykatu, który kopiuje sprawdzany element (zakładając, że masz na myśli "zapisz element"), jeśli to konieczne. Być może brzmi to trochę nieciekawie, ale wszystko będzie dobrze.
To działa, ponieważ funkcja predykat zostaną przedstawione z każdego elementu HashSet w nieokreślonym celu, a więc można zdecydować, co zrobić z każdego elementu, jak również powrót true
aby go usunąć i false
aby ją zachować.
[EDYTOWANIE] Oto przykład kodu.
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; } }
}
}
'zapisywanie elementu' gdzie chcesz zapisać element? Zakładając, że nic nie robisz, to jest * zapisywane * w haszowaniu –
Nie, chcę znaleźć i zapisać "najlepszy" element z HashSet w pewnym sensie optymalizacji, gdzie przechodzę przez wieloetapową procedurę, usuwając wszystkie elementy, które już zostały przekroczyła najlepszą możliwą wartość. –