Esempio n. 1
0
        double calc(int[] arr1, int [] arr2)
        {
            ////var arr1 = i1.ToString().ToCharArray().Select(it => (int)it).ToList();
            ////var arr2 = i2.ToString().ToCharArray().Select(it => (int)it).ToList();
            //var sections = Diff.CalculateSections<int>(arr1, arr2);

            //var matches = sections.Where(s => s.IsMatch);
            //var unmatches = sections.Where(s => !s.IsMatch);
            //var a = (double)matches.Select(s => s.LengthInCollection1).Sum() * matches.Count();
            //var b = (double)unmatches.Select(s => s.LengthInCollection1).Sum() * unmatches.Count();
            ////	Console.WriteLine(a);
            ////	Console.WriteLine(b);
            ////	Console.WriteLine(b/a);
            //return b / a;


            //var arr1 = i1.ToString().ToCharArray().Select(it => (int)it).ToList();
            //var arr2 = i2.ToString().ToCharArray().Select(it => (int)it).ToList();
            var sections = Diff.Calculate <int>(arr1, arr2);

            var matches   = sections.Where(s => s.Equal);
            var unmatches = sections.Where(s => !s.Equal);
            var a         = (double)matches.Select(s => s.Length1).Sum() * matches.Count();
            var b         = (double)unmatches.Select(s => s.Length2).Sum() * unmatches.Count();

            //System.Console.WriteLine(a);
            //System.Console.WriteLine(b);
            //System.Console.WriteLine(b / a);
            return(b / a);
        }
        private async Task UpdateItemsAsync(IEnumerable <TimeEntryMessage> msgs)
        {
            // 1. Get only TimeEntryHolders from current collection
            _currentHolders = _currentHolders ?? Items;
            var timeHolders = grouper.Ungroup(_currentHolders.OfType <T> ()).ToList();

            // 2. Remove, replace or add items from messages
            foreach (var msg in msgs)
            {
                UpdateTimeHolders(timeHolders, msg.Data, msg.Action);
            }

            // 3. Create the new item collection from holders (sort and add headers...)
            var newItemCollection = await CreateItemCollectionAsync(timeHolders, loadTimeEntryInfo);

            // 4. Check diffs, modify ItemCollection and notify changes
            var diffs = Diff.Calculate(_currentHolders, newItemCollection);

            _currentHolders = newItemCollection;

            // 5. Swap remove events to delete normal items before headers.
            // iOS requierement.
            diffs = Diff.SortRemoveEvents <IHolder, DateHolder> (diffs);

            // CollectionChanged events must be fired on UI thread
            ServiceContainer.Resolve <IPlatformUtils>().DispatchOnUIThread(() => {
                foreach (var diff in diffs)
                {
                    switch (diff.Type)
                    {
                    case DiffType.Add:
                        Insert(diff.NewIndex, diff.NewItem);
                        break;

                    case DiffType.Remove:
                        RemoveAt(diff.NewIndex);
                        break;

                    case DiffType.Replace:
                        this[diff.NewIndex] = diff.NewItem;
                        break;

                    case DiffType.Move:
                        Move(diff.OldIndex, diff.NewIndex, diff.NewItem);
                        break;
                    }
                }
            });
        }