Группировка и сумма

После долгих поисков я наконец нашел что-то, что работает с последним WordPress. Ниже приведены следующие шаги:

  1. Найдите каталог своей темы, создайте папку в каталоге для своих пользовательских js (custom_js в этом примере).
  2. Поместите свой пользовательский jQuery в файле .js в этом каталоге (jquery_test.js в этом примере).
  3. Убедитесь, что ваш пользовательский jQuery .js выглядит следующим образом:
    (function($) {
    $(document).ready(function() {
    $('.your-class').addClass('do-my-bidding');
    })
    })(jQuery);
    
  4. Перейти в каталог темы , открыть функции functions.php
  5. Добавить код рядом с вершиной, который выглядит так:
    //this goes in functions.php near the top
    function my_scripts_method() {
    // register your script location, dependencies and version
       wp_register_script('custom_script',
       get_template_directory_uri() . '/custom_js/jquery_test.js',
       array('jquery'),
       '1.0' );
     // enqueue the script
      wp_enqueue_script('custom_script');
      }
    add_action('wp_enqueue_scripts', 'my_scripts_method');
    
  6. Проверьте свой сайт, чтобы убедиться, что он работает!
1
задан Uwe Keim 6 March 2019 в 07:39
поделиться

1 ответ

Будет ли это лучшим способом, зависит от ваших приоритетов. Важна ли скорость обработки или более важно, чтобы код был легким для понимания, легким для тестирования, легким для изменения и легким для отладки?

Одним из преимуществ LINQ является то, что он пытается избежать перечисления источника более чем необходимо.

Вы уверены, что пользователям этого кода всегда понадобится полная коллекция? Может ли быть так, что сейчас или в ближайшем будущем кто-то хочет только первый элемент? Или решает прекратить перечисление после того, как он извлек 20-й элемент и увидел, что он не представляет для него ничего интересного?

При использовании LINQ попытайтесь вернуть IEnumerable<...> как можно дольше. Пусть только конечный пользователь, который будет интерпретировать ваши данные LINQed, решит, хочет ли он взять только все FirstOrDefault() или Count(), или поместить их в словарь, или что-то еще. Создание Списка является пустой тратой вычислительной мощности, если он не будет использоваться в качестве Списка.

Ваш код LINQ и ваш foreach делают совершенно разные вещи. Увы, здесь, в StackOverflow, люди часто просят операторы LINQ, не задавая при этом своих требований. Поэтому мне придется угадать что-то среднее между вашим утверждением LINQ и вашим foreach.

Требование Сгруппируйте входную последовательность kitItems, которая, как ожидается, будет Fuel_KitItems, в группы из BoxReportViews с одинаковым BoxName, и выберите несколько свойств из каждого Fuel_KitItem в каждая группа.

var kitItemGroups = kitItems
    .Cast<Fuel_KitItem>()       // only needed if kitItems is not IEnumerable<Fuel_KitItem>
    // make groups of Fuel_KitItems with same BoxName:
    .GroupBy(fuelKitItem => fuelKitItem.BoxName,

        // ResultSelector, take the BoxName and all fuelKitItems with this BoxName:
        (boxName, fuelKitItemsWithThisBoxName) => new
        {
            // Select only the properties you plan to use:
            BoxName = boxName,

            FuelKitItems = fuelKitItemsWithThisBoxName.Select(fuelKitItem => new
            {
                 // Only Select the properties that you plan to use
                 BatchNumber = fuelKitItem.BatchNumber,
                 Qty = fuelKitItem.Qty,
                 ...

                 // Not needed, they are all equal to boxName:
                 // BoxName = fuelKitItem.BoxName
             })
            // only do ToList if you are certain that the user of the result
            // will need the complete list of fuelKitItems in this group
            .ToList(),
         });

Использование:

var kitItemGroups = ...

// I only need the KitItemGroups with a BoxName starting with "A"
var result1 = kitItemGroups.Where(group => group.BoxName.StartsWith("A"))
    .ToList();

// Or I only want the first three after sorting by group size
var result2 = kitItemGroups.OrderBy(group => group.FuelKitItems.Count())
    .Take(3)
    .ToList();

Улучшения эффективности: Пока вы не знаете, как будет использоваться ваш LINQ, не делайте его списком. Если вы знаете, что высоки шансы на то, что необходим Count of group.FuelKitItems для ToList

0
ответ дан Harald Coppoolse 6 March 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: