Когда я выполню итерации через Словарь (.NET универсальная структура данных), это будет в том же порядке, что я добавил их?

Для достижения этой привязки к событию submit самого form, а не к событию click кнопки отправки. Также обратите внимание, что вы не должны использовать on* атрибуты события. Поскольку HTML-содержимое формы динамически добавляется в DOM, вы можете вместо этого использовать делегированный обработчик событий как для form, так и для span. Попробуйте это:

$(document).ready(function() {
  $('.click_notes').on('click', function() {
    var tid = $(this).data('question-id');
    $(this).closest('ul').find('.demo').html('<div class="comment_form"><span><b>X</b></span><form id="contactForm1" action="submit.php" method="post"><textarea required cols="50" class="span10" name="notes" rows="6"></textarea><br><input class="btn btn-primary" id="submitnotes" name="submit_notes" type="submit" value="Add Notes"><input type="hidden" name="submitValue" value="' + tid + '" /></form><br></div>');
  });

  $(document).on('submit', '#contactForm1', function(e) {
    e.preventDefault();

    $.ajax({
      type: this.method,
      url: this.action,
      data: $(this).serialize(),
      success: function(data) {
        console.log('Submission was successful.');
        console.log(data);
      },
      error: function(xhr) {
        console.log('An error occurred.');
        console.log(xhr);
      },
    });
  }).on('click', 'span', function() {
    $(this).parent().hide()
  });
});

Также обратите внимание, что вы включаете две версии jQuery, одна из которых (1.6.1) устарела почти на 8 лет. Я бы предложил вместо этого использовать одну ссылку на jQuery 3.3.1.

9
задан Peter Mortensen 3 February 2010 в 21:21
поделиться

4 ответа

Нет. Если необходимо сохранить порядок, у Вас должен быть список объектов также. Вы могли инкапсулировать все операции, в которых Вы нуждаетесь в своем собственном классе набора, который обновил бы и словарь и список одновременно.

Неудачно, что.NET не имеет словаря, который поддерживает это само - это - довольно общий запрос - Java делает как LinkedHashMap.

10
ответ дан 4 December 2019 в 20:25
поделиться

tpower, Dictionary и SortedDictionary очень похожи в этом, они оба содержат набор объектов, доступных ключом. То, где они отличаются, находится в способе, которым они внутренне создаются.

Dictionary быстрее для вставки насколько я знаю, тогда как SortedDictionary создается сверх алгоритма поиска двоичного дерева и быстрее для чтения назад.

В обеих ситуациях, хотя, внутренний порядок поддержан ключевым порядком. Нет ничего, чтобы гарантировать, что порядок, которого Вы выполняете итерации через весь набор, совпадет с Вами, вставил Ваши объекты.

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

0
ответ дан 4 December 2019 в 20:25
поделиться

Нет. Вы - более обеспеченное использование SortedDictionary, если Вы хотите сохранить свои ключи в порядке.

Править: Или это, или добавляют Ваши ключи к связанному списку, если Вы хотите отслеживать порядок, Вы добавили объекты.

-1
ответ дан 4 December 2019 в 20:25
поделиться

Документация ясно указывает, что "В целях перечисления, каждый объект в словаре рассматривают как KeyValuePair <(<(TKey, TValue>)>) структура, представляющая значение и его ключ. Порядок, в котором возвращаются объекты, не определен". но я не убежден.

Во всех тестах я выполнил, объекты всегда заказываются вставкой.

Я нашел это странным, потому что я также протестировал HashMap и LinkedHashMap (в Java), и порядок в HashMap не является правильным как ожидалось, но, как Jon Skeet сказал, порядок в LinkedHashMap.

Кто-либо может указать на тест сбоя со Словарем?

Вот код, который я использую к тесту:

        IDictionary<string, int> dic = new Dictionary<string, int>(10);

        Console.WriteLine("Adding ...");
        for (int i = 0; i < 1000000; i++)
        {
            Guid guid = Guid.NewGuid();
            dic.Add(guid.ToString(), i);
        }
        Console.WriteLine("Testing ...");

        bool first = true;
        int lastItem = 0;
        foreach (var item in dic.Values)
        {
            if (first)
            {
                first = false;
            }
            else
            {
                if (lastItem != item - 1)
                {
                    Console.WriteLine("Test Failed !");
                    break;
                }

            }
            lastItem = item;
        }
        Console.WriteLine("Done.");
-2
ответ дан 4 December 2019 в 20:25
поделиться
Другие вопросы по тегам:

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