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; } } }); }