Группировать и сортировать результаты массива структур в ColdFusion - PullRequest
0 голосов
/ 07 мая 2019

У меня есть массив структур в ColdFusion.Я хотел бы сгруппировать результаты по одному элементу и отсортировать их на основе нескольких других атрибутов структур.Какой самый эффективный и современный способ достичь этого?Я могу изменить порядок сортировки запроса, если мне нужно.

Например, теперь у меня он сначала отсортирован по заголовку, сгруппирован по нему, сравнивая текущий заголовок цикла с предыдущим, и если он имеетизменилось я увидел новый.

myArray[1]
struct
Title = Heading 1
Description = lorem ipsum
Field 2 = this has to be second #1
Field 1 = this has to be first #1
Field 3 = this has to be third #1

myArray[2]
struct
Title = Heading 1
Field 3 = this has to be third #2
Field 1 = this has to be first #2
Description = dolor sit amet
Field 2 = this has to be second #2


myArray[3]
struct
Title = Heading 2
Description = onsectetur adipiscing elit.
Field 1 = this has to be first #3
Field 2 = this has to be second #3
Field 3 = this has to be third #3

myArray[3]
struct
Title = Heading 2
Description = Nullam ultrices
Field 1 = this has to be first #4
Field 2 = this has to be second #4
Field 3 = this has to be third #4

Нужно сгруппировать и отсортировать результаты следующим образом:

Heading 1 = show ONE time because it is the title that I want to group the results
dolor sit amet  = sorted descriptions (this can be done from the SQL Query)
lorem ipsum  = sorted descriptions (this can be done from the SQL Query)
this has to be first #1 = sorted Fields (this can be done from the SQL Query)
this has to be second #1
this has to be third #1
this has to be first #2
this has to be second #2
this has to be third #2

--
Heading 2
onsectetur adipiscing elit.
Nullam ultrices
this has to be first #3 
this has to be second #3
this has to be third #3
this has to be first #4
this has to be second #4
this has to be third #4
```

  <cfif myArray[i].Title neq local.prevTitle>
    <h2>#Title#/h2>
  </cfif>
  <cfif myArray[i].Title neq local.prevTitle>
   <ul>
  </cfif>
    <li>#Description#</li>
    <li>#Field1#</li>
    <li>#Field2#</li>
    <li>#Field3#</li>
 <cfif i neq arrayLen(myArray) AND myArray[i+1].Title neq myArray[i].Title>
   </ul>
</cfif>
<cfif i eq arrayLen(myArray)>
   </ul>
</cfif>
<cfset prevTitle= myArray[i].Title />

Мне также нужно добавить элементы HTML перед заголовком группы и после группы результатов.Например, чтобы показать <hr> перед началом показа новых сгруппированных результатов.Я сделал несколько проверок, если есть другой элемент в массиве, и если он не последний, и название изменилось, чтобы показать HR.Примерно так:

<cfif i neq arrayLen(myArray) AND myArray[i+1].Title neq myArray[i].Title>
     <hr />
</cfif>

Но я подумал, что должен быть более эффективный и современный способ сделать это. Так что, если у кого-нибудь есть какие-либо предложения, я бы с удовольствием его прочитал.

Спасибовы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...