Tôi đã nhìn vào tìm kiếm mặt với Lucene.NET, tôi đã tìm thấy một ví dụ tuyệt vời here giải thích một số tiền hợp lý, ngoài thực tế là nó hoàn toàn nhìn thấy chức năng kiểm tra cardinality của các mục trong một mảng bit.Ai đó có thể giải thích cho tôi phương pháp GetCardinality này đang làm gì không?
Có ai có thể cho tôi chạy trốn khỏi những gì nó đang làm không? Những điều chính tôi không hiểu là lý do tại sao bitSetArray được tạo ra vì nó là gì, nó được sử dụng như thế nào và tất cả các câu lệnh if hoạt động như thế nào trong vòng lặp for.
Đây có thể là một yêu cầu lớn nhưng tôi phải hiểu cách hoạt động này trước khi tôi thậm chí có thể nghĩ đến việc sử dụng nó trong mã của riêng tôi.
Cảm ơn
public static int GetCardinality(BitArray bitArray)
{
var _bitsSetArray256 = new byte[] {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8};
var array = (uint[])bitArray.GetType().GetField("m_array", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(bitArray);
int count = 0;
for (int index = 0; index < array.Length; index ++)
count += _bitsSetArray256[array[index] & 0xFF] + _bitsSetArray256[(array[index] >> 8) & 0xFF] + _bitsSetArray256[(array[index] >> 16) & 0xFF] + _bitsSetArray256[(array[index] >> 24) & 0xFF];
return count;
}
Rực rỡ, cảm ơn AakashM. Một số điều này vẫn đi qua đầu của tôi, nhưng ít nhất tôi hiểu khái niệm về phương pháp và chính xác những gì nó đang làm. –