HashMultiMap сохранить повторяющиеся привязки клавиш на фоне?
Почему при table.Count = 1 функция итерации таблицы получает более 1 пары ключ-значение? И если это особенность, как я могу ожидать поведение?
//
let table = new HashMultiMap<string, int> (HashIdentity.Structural)
table.Add("a", 1)
table.Add("a", 1)
table.Add("a", 1)
// now table.Count is one
let reduced = table.Fold (fun k v acc -> (k,v) :: acc) []
let acc = ref []
table.Iterate (fun k v -> acc.contents <- (k,v) :: acc.contents)
//
сокращение и соотв. содержание содержит три ("а",1) пары
1 ответ
Решение
Документация для Count
участник говорит:
Общее количество ключей в хеш-таблице
Если у вас есть несколько значений, связанных с одним и тем же ключом, все равно остается только один ключ, поэтому значение 1 является ожидаемым результатом для вашего примера. Насколько я вижу, нет свойства, которое возвращает общее количество значений, но вы можете легко реализовать это, используя Fold
:
let valueCount = table.Fold (fun _ _ n -> n + 1) 0