예제 #1
0
        public List <BinarySearchMultiSet <int> > GetUsersGroups()
        {
            ReadData();

            var result = new List <BinarySearchMultiSet <int> >();

            int processed = 0;

            foreach (var element in _list)
            {
                if (++processed % 1000 == 0)
                {
                    Console.Write("                      \r");
                    Console.Write("Processed: {0} %\r", 100.0f * processed / _list.Count);
                }

                BinarySearchMultiSet <int> destination = null;
                foreach (var group in result)
                {
                    foreach (var value in element.Item2)
                    {
                        if (group.Contains(value))
                        {
                            destination = group;
                            break;
                        }
                    }
                }
                if (destination == null)
                {
                    destination = new BinarySearchMultiSet <int>(Comparer <int> .Default);
                    result.Add(destination);
                }

                var toAdd = new List <int> {
                    element.Item1
                };
                toAdd.AddRange(element.Item2.Where(value => !destination.Contains(value)));
                foreach (var value in toAdd)
                {
                    destination.Add(value);
                }
            }
            return(result);
        }
예제 #2
0
 public UsersGroup(BinarySearchSet <int> users, BinarySearchMultiSet <Tuple <int, float> > urlsStats)
 {
     this.users     = users;
     this.urlsStats = urlsStats;
 }