Scala итеративный набор и sameElements [duplicate]

Вероятно, самый простой способ сделать это - вернуть файл PHP в JSON. Итак, допустим, у вас есть файл query.php ,

  $ result = mysql_query ("SELECT field_name, field_value FROM the_table");  $ to_encode = array ();  while ($ row = mysql_fetch_assoc ($ result)) {$ to_encode [] = $ row;  } echo json_encode ($ to_encode);   

Если вам ограничено использование document.write (как вы заметили в комментариях ниже), дайте вашим полям атрибут id следующим образом: & lt; input type = "text "id =" field1 "/ & gt; . Вы можете ссылаться на это поле с помощью этого jQuery: $ ("# field1"). Val () .

Вот полный пример с HTML. Если мы предполагаем, что ваши поля называются field1 и field2 , тогда

  & lt;! DOCTYPE html & gt;  & Lt; & HTML GT;  & Lt; & головка GT;  & lt; title & gt; Это о нем & lt; / title & gt;  & Lt; / головка & GT;  & Л; тело & GT;  & Lt; & форма GT;  & lt; input type = "text" id = "field1" / & gt;  & lt; input type = "text" id = "field2" / & gt;  & Lt; / форма & GT;  & Lt; / тело & GT;  & lt; script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" & gt; & lt; / script & gt;  & Lt; & сценарий GT;  $ .getJSON ('data.php', function (data) {$ .each (data, function (fieldName, fieldValue)) {$ ("#" + fieldName) .val (fieldValue);});});  & Lt; / сценарий & GT;  & Lt; / HTML & GT;   

Это вставка после того, как был построен HTML, что может быть проще всего. Если вы хотите заполнить данные при динамическом построении HTML, вы все равно хотите, чтобы файл PHP возвращал JSON, вы просто добавляете его непосредственно в атрибут value .

33
задан DNA 12 March 2015 в 12:25
поделиться

1 ответ

Библиотека коллекций Scala предоставляет специализированные реализации для наборов из менее 5 значений (см. источник ). Итераторы для этих реализаций возвращают элементы в том порядке, в котором они были добавлены , а не в согласованном порядке на основе хешей, используемом для больших наборов.

Кроме того, sameElements ( scaladoc ) определен на Iterable s (он реализован в IterableLike - см. источник ); он возвращает true, только если итераторы возвращают одни и те же элементы в одном порядке.

Итак, хотя Set(1,2,3) и Set(3,2,1) должны быть эквивалентными, их итераторы различны, поэтому sameElements возвращает false.

Такое поведение является неожиданным и, возможно, является ошибкой, поскольку оно нарушает математические ожидания для Set (но только для определенных размеров Set!).

As И.К. указывает на комментарии, == отлично работает, если вы просто сравниваете Sets друг с другом, то есть Set(1,2,3) == Set(3,2,1). Однако sameElements является более общим в том смысле, что он может сравнивать элементы любых двух итераций. Например, List(1, 2, 3) == Array(1, 2, 3) является ложным, но List(1, 2, 3) sameElements Array(1, 2, 3) является истинным.

В более общем плане, равенство может сбивать с толку - обратите внимание, что:

List(1,2,3) == Vector(1,2,3)
List(1,2,3) != Set(1,2,3)
List(1,2,3) != Array(1,2,3)      
Array(1,2,3) != Array(1,2,3)

У меня есть отправлено fix для упражнений Scala , которые объясняют проблему sameElements.

71
ответ дан DNA 15 August 2018 в 16:24
поделиться
  • 1
    По имени метода я ожидаю, что он будет игнорировать порядок, независимо от типа коллекции. Например. Я ожидал бы List(1,2,3) sameElements List(3,2,1) для оценки true, потому что оба содержат одни и те же элементы . Если порядок имеет значение, то какова предполагаемая разница между sameElements и ==? – Zoltán 12 March 2015 в 12:40
  • 2
    Отличная находка ... В большом проекте что-то подобное может сбить любого с ума. Вы подняли билет для этого в официальных вопросах scala. – Sarvesh Kumar Singh 12 March 2015 в 12:40
  • 3
    Я люблю scala так много, но ошибки, подобные этому, настолько обескураживают. Хорошая находка. – Ben Reich 12 March 2015 в 13:34
  • 4
    @Sarvesh_Kumar_Singh Обсуждается здесь в списке scala-debate, но там не упоминается билет ... – DNA 12 March 2015 в 13:54
  • 5
    @ Золтан, я полностью согласен. По разнице: Scala не отменяет == для массивов (или, по крайней мере, не больше). Поэтому == и sameElements могут создавать разные ответы для массивов. – Paul Draper 16 May 2016 в 21:05
Другие вопросы по тегам:

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