当前位置: 首页>>代码示例>>C#>>正文


C# IOrderedEnumerable.ElementAtSafe方法代码示例

本文整理汇总了C#中IOrderedEnumerable.ElementAtSafe方法的典型用法代码示例。如果您正苦于以下问题:C# IOrderedEnumerable.ElementAtSafe方法的具体用法?C# IOrderedEnumerable.ElementAtSafe怎么用?C# IOrderedEnumerable.ElementAtSafe使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IOrderedEnumerable的用法示例。


在下文中一共展示了IOrderedEnumerable.ElementAtSafe方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: CalcBestPackAlg

        //Вычисляем дельту весов и дельту цены по каждой парах  [ElementInGroup(i) - firstOutOfGroupElement], firstOutOfGroupElement - secondOutOfGroupElement
        //Выбираем мин дельту цены, такую что дельта весов > 0 (вес уменьшится);
        private GoodsPack CalcBestPackAlg(IOrderedEnumerable<Good> goodsByPrice, Good[] mostExpensiveGoods, Good firstOutOfGroupElement)
        {
            //Решаем переходить к следующему внегрупповому элементу или делать подстановку с целью уменьшения веса группы.
            //Для решения сравниваем выигрыш в весе группы, если
            //1) Заменим i-ый элемент, - всего n разниц
            //2) Перейдем к следующему элементу вне группы, =  Вес (n+1) элемента - вес (n+2) элемента

            var currentOutOfGroupElement = firstOutOfGroupElement;
            currentOutOfGroupElement.Index = mostExpensiveGoods.Length;

            while (currentOutOfGroupElement != null)
            {
                foreach (var good in mostExpensiveGoods)
                {
                    good.DeltaWeight = good.Weight - firstOutOfGroupElement.Weight;
                }

                var nextOutOfGroupElement = goodsByPrice.ElementAtSafe(currentOutOfGroupElement.Index + 1);
                if (nextOutOfGroupElement == null)
                {
                    currentOutOfGroupElement.DeltaWeight = int.MinValue;
                }
                else
                {
                    nextOutOfGroupElement.Index = currentOutOfGroupElement.Index + 1;
                }
                var allElements = new List<Good>(mostExpensiveGoods.Length + 1);
                allElements.AddRange(mostExpensiveGoods);
                allElements.Add(currentOutOfGroupElement);
                var maxDeltaWeight = allElements.Max(el => el.DeltaWeight);
                var mostPriorityByWeightElement = allElements.OrderByDescending(el => el.Price).First(e => e.DeltaWeight == maxDeltaWeight);
                if (mostPriorityByWeightElement.Index < mostExpensiveGoods.Length)
                {//значит нужно сделать ракировку элемента группы с элементом вне группы
                    mostExpensiveGoods[mostPriorityByWeightElement.Index] = currentOutOfGroupElement;
                }

                if (mostExpensiveGoods.Sum(g => g.Price) <= _bagMaxWeight)
                {//Как только найдена группа с суммой элементов < вместимости рюкзака, группаз разрядности n считается найеденнной
                    return CreatePack(mostExpensiveGoods);
                }
                currentOutOfGroupElement = nextOutOfGroupElement;
            }
            return new GoodsPack(); // групп ранга n с  сумой весов < вместимости рюкзака - не существует
        }
开发者ID:aBaTaPbl4,项目名称:Mini,代码行数:46,代码来源:MuAlg.cs


注:本文中的IOrderedEnumerable.ElementAtSafe方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。