Bạn chỉ cần sử dụng RemoveWhere() với chức năng vị ngữ thích hợp.
Bạn có thể có tác dụng phụ của biến vị ngữ của bạn sao chép phần tử được chọn (giả sử đó là ý của bạn bằng cách "lưu phần tử"), nếu cần. Có lẽ điều đó nghe có vẻ hơi hack, nhưng nó sẽ làm việc tốt tôi nghĩ.
Điều này hoạt động vì hàm vị ngữ của bạn sẽ được trình bày với mỗi phần tử của HashSet theo thứ tự không xác định và do đó bạn có thể quyết định làm gì với từng phần tử, cũng như trả lại true
để xóa nó và false
.
[EDIT] Đây là mẫu mã.
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; } }
}
}
Nguồn
2013-04-02 08:31:34
'lưu phần tử' bạn muốn lưu phần tử ở đâu? Giả sử khi bạn không làm gì, nó được lưu * trong hashset –
Không, tôi muốn tìm và lưu phần tử "tốt nhất" từ HashSet theo một số ý nghĩa tối ưu, nơi tôi thực hiện một quy trình nhiều bước, xóa tất cả các phần tử đã vượt quá giá trị tốt nhất có thể. –