Extension:Arrays

From mediawiki.org
This page is a translated version of the page Extension:Arrays and the translation is 100% complete.
Uyarı Uyarı: This extension is incompatible with plans to parallelize the parsing, as is intended by the use of Parsoid . Therefore, the future of this extension is uncertain, and it is expected to become incompatible with the standard MediaWiki parser within a few years. For further information, see görev T250963 and Parsoid/Extension API - No support for sequential, in-order processing of extension tags.
MediaWiki manüel uzantıları
OOjs UI icon advanced-invert.svg
Arrays
Sürüm durumu: kararlı
Uygulama Ayrıştırıcı işlevi
Açıklama Ayrıştırıcıyı dizi işlevleriyle geliştirir.
Yazar(lar) Li Ding, Jie Bao, Daniel Werner
En son sürüm 2.2.1 (2020-12-08)
MediaWiki 1.31+
Veritabanı değişiklikleri Hayır
Lisans MIT Lisansı
İndir
README
CHANGELOG
  • $wgArraysCompatibilityMode
  • $wgArraysExpansionEscapeTemplates
Translatewiki.net adresinde mevcutsa, Arrays uzantısını çevirin

Kullanım ve sürüm matrisini kontrol edin.

Sorunlar Açık görevler · Hata bildir

Arrays uzantısı (önceden ArrayExtension olarak biliniyordu), diziler üzerinde çalışan ek bir ayrıştırıcı işlevi oluşturur.

İşlevler

Bu uzantı, aşağıdaki ayrıştırıcı işlevlerini tanımlar:

Grup İşlevler
Bir dizi oluşturun (benzersiz, sıralama, yazdırma seçenekleriyle) #arraydefine
Bir diziden bilgi ayıklayın #arrayprint, #arrayindex, #arraysize, #arraysearch, #arraysearcharray, #arrayslice
Bir diziyi değiştir #arrayreset, #arrayunique, #arraysort
Birkaç dizi arasındaki etkileşim #arraymerge, #arrayunion, #arrayintersect, #arraydiff
Extension:HashTables kurulursa, dizi/karma tablo etkileşimi için #hashtoarray , #arraytohash

Dizi oluşturma

arraydefine

Bu işlev, 'delimiter' ile ayrılmış 'values' listesini kullanarak bir dizi ('key' ile tanımlanan) oluşturur. Değişkene daha sonra diğer işlevler tarafından erişilebilir.

Sözdizimi:

{{#arraydefine:key|values|delimiter|options}}

Notlar:

  • values, delimiter ile ayrılmış dizelerin listesidir.
  • Ortaya çıkan dizi, bir dizi dizidir.
  • Varsayılan sınırlayıcı belirtilmemişse ',' değeridir, sınırlayıcı bir dize (sınırlayıcıyı çevreleyen beyaz boşluklar kesilecektir) veya bir Perl normal ifadesi olabilir, örn. /\s*,\s*/ (preg_split sayfasına bakın).
  • Kullanıcılar boş bir dizi tanımlayabilir (örneğe bakın).
  • Kullanıcılar benzersiz, sıralama ve yazdırma gibi seçenekleri belirleyebilir (örneğe bakın).
    • Bir sınırlayıcı da belirtilmediği sürece seçenekler yoksayılır.

Örnekler:

'a' adında tek elemanlı bir dizi tanımlayın
{{#arraydefine:a|red}}
'b' adında dört öğeli bir dizi tanımlayın, varsayılan sınırlayıcıyı kullanın (',')
{{#arraydefine:b|orange, red, yellow, yellow}}
'c' adında boş bir dizi tanımlayın/ayarlayın
{{#arraydefine:c}}
Sınırlayıcı olarak ';' kullanarak 'd' adında iki elemanlı bir dizi tanımlayın
{{#arraydefine:d|apple; pear|;}}
Sınırlayıcı olarak /\s*[;,]\s*/ normal ifadesini kullanarak 'e' adında üç elemanlı bir dizi tanımlayın
{{#arraydefine:e|apple, pear; orange|/\s*[;,]\s*/}}
'f' adında üç öğeli bir dizi tanımlayın, sınırlayıcı (','), "unique, sort=desc, print=list" seçeneklerini kullanın (dizi elemanları benzersizdir, azalan düzende sıralanır ve yazdırılır). Sıralamanın daha fazla seçenek değeri için #arraysort sayfasına bakın.
{{#arraydefine:f|orange, red, yellow, yellow |, |unique, sort=desc, print=list}}

Dizilerle çalışma

Çıkarma

arrayprint

Bu işlev, bir dizinin değerlerini özelleştirilebilir biçimde yazdırır.

Sözdizimi:

{{#arrayprint:key|delimiter|pattern|subject|options}}

Notlar:

  • subject viki bağlantılarını, şablonları ve ayrıştırıcı işlevlerini kabul eder.
  • subject içinde, '|' boru karakterlerinden kaçmak zorunda değilsiniz. Tüm yapı içinde, pattern aranacak ve her döngünün mevcut (çıkarılan) dizi değeri ile değiştirilecektir. Son olarak, tüm dize ayrıştırılacak ve ayırıcı olarak delimiter ile patlatılacak bir dizi sonuç içine koyulacaktır.
  • Yazdırılması gereken dizinin mevcut olmaması durumunda, boş bir dize döndürülür (uyumluluk modunun bir parçası olan 1.4 alfada sunulmuştur).
  • Varsayılan sınırlayıcı dile bağlıdır, İngilizce için ', ' şeklindedir (2.0'da sunulmuştur, uyumluluk modunun bir parçasıdır).

Örnekler:

Yazdır - dile bağlı varsayılan liste sınırlayıcıyı kullanma
{{#arrayprint:b}}
Yazdır - sınırlayıcı olmadan
{{#arrayprint:b | }}
Yazdır - sınırlayıcı olarak '‎<br />' (satır sonu) kullanma
{{#arrayprint:b |<br/> }}
Son iki öğenin ' and ' (veya yerel dillerdeki eşdeğeri) ile zincirlendiği güzel liste çıkışı. delimiter parametresi boş olsa bile, ', ' (veya dillerdeki eşdeğeri) kullanılacaktır çünkü aksi hâlde pek hoş olmaz.
{{#arrayprint:b ||@ |@ |print=pretty }}
Viki bağlantısını kategorilere gömün
{{#arrayprint:b |<br/> |@@@@ |[[:Category:@@@@|@@@@]] }}
Semantic MediaWiki özellik değeri tanımlayın
{{#arrayprint:b |<br/> |@@@@ |[[prop1::@@@@]] }}
Ayrıştırıcı işlevini gömün
{{#arrayprint:b |<br/> |@@@@ |length of @@@@:{{#len:@@@@}} }}
Şablonu göm (parametrelerle birlikte)
{{#arrayprint:b|<br/>|@@@@|{{template|prop2|@@@@}} }}

arrayindex

Bu işlev, bir dizinin değerini (key ile tanımlanır) index konumunda yazdırır.

Sözdizimi:

{{#arrayindex:key|index|default}}

Notlar:

  • Geçersiz dizin (sayı dışı, sınır dışı) boş bir dize yazdırılmasına neden olur.
  • Dizin 0 tabanlıdır, yani ilk öğenin dizini 0'dır.
  • Negatif dizinler, sondan çok uzakta bir öğe döndürür (örneğin, dizinin son öğesi -1 olur).
  • Dizinin olmaması, anahtarın dizide olmaması veya değerin boş bir dize olması durumunda default döndürülür.

Örnekler:

a dizisi içindeki üçüncü öğe
{{#arrayindex:a |2 }}
b dizisi içindeki son öğe
{{#arrayindex:b |-1 }}
Geçersiz dizin için varsayılan değeri yazdır
{{#arrayindex:c |foo |bad value }}

arraysize

Bu işlev, bir dizinin boyutunu (öge sayısı) döndürür.

https://php.net/function.count sayfasına bakın Verilen dizinin mevcut olmaması durumunda, işlevin çıkışı sayı yerine geçersiz bir dize olacaktır. Bu, dizinin var olup olmadığını kontrol etmeyi sağlar.

Sözdizimi:

{{#arraysize:key}}

Örnekler:

a dizisinin boyutu:
{{#arraysize:a}}
a dizisinin var olup olmadığını kontrol edin:
{{#if: {{#arraysize:b}} | ''dizi var'' | ''dizi tanımlanmadı'' }}

arraysearch

Bu işlev, 'index' parametresiyle tanımlanan konumdan başlayarak dizideki ('key' ile tanımlanan) 'value' ögesinin ilk oluşumunun dizinini döndürür ve başarısız olduğunda boş bir dize döndürür. yes ve/veya no belirtildiğinde, bu, eğer bulunursa yes olarak ayarlanan değeri, aksi takdirde no değerini genişletecektir. https://php.net/function.array-search sayfasına bakın

Sözdizimi:

{{#arraysearch:key|value|index|yes|no}}


Örnekler:

Bir değerin ilk oluşumunun dizini döndürün
{{#arraysearch:b|white}}
{{#arraysearch:b|red}}
Bir değerin ilk oluşumunun dizini döndürün
{{#arraysearch:b|white}}
{{#arraysearch:b|red}}
ofset kullanın
{{#arraysearch:b|red|0}}
{{#arraysearch:b|red|2}}
preg düzenli ifade eşleşmesini kullanın
{{#arraysearch:b|/low/}}
{{#arraysearch:b|/LOW/i}} - büyük/küçük harfe duyarsız
{{#arraysearch:b|low}}
yes no yazdırma seçeneğini kullanın
{{#arraysearch:b|white|0|yes|no}}
{{#arraysearch:b|yellow|0|yes|no}}

arraysearcharray

Bu işlev bir diziyi arar (key ile tanımlanır) ve tüm sonuçlarla birlikte aramadan yeni bir dizi (new_key ile tanımlanır) oluşturur. Arama kriteri value bir dize veya normal bir ifade olabilir. index verilirse, arama orada başlayacak, limit maksimum arama sonuçlarını tanımlayabilir. transform ile tanımlanan parametre, value normal bir ifadeyse kullanılabilir. Eşleşen girdilerin sonucunu, PHP preg_replace içine yapacağı gibi new_key dizisine dönüştürebilir.

Sözdizimi:

{{#arraysearcharray:new_key|key|value|index|limit|transform}}

Notlar:

  • value bir dize ise, new_key dizisi yalnızca tam olarak bu dizenin girişlerini içerecektir.
  • -n gibi negatif index değerleri, yalnızca son n girişlerini aramak için kullanılabilir.
  • Viki içinde Extension:Regex Fun varsa, Regex Fun'ın e değiştiricisi normal ifade içinde kullanılabilir. Bunun PHP'nin e değiştiricisiyle hiçbir ilgisi yoktur (bu bir güvenlik ihlali olur). Aktif e değiştirici ile, geri referanslar eklendikten sonra transform dizgisi ayrıştırılır, bundan sonra gerçek eşleşmenin yerini alır.

Örnekler:

'a' dizisindeki A ile başlayan ve ardından bir boşluk bırakan tüm girdileri bulun ve bunları yeni bir 'x' dizisine koyun.
{{#arraysearcharray:x |a |/^A\s.+/ }}
Sayılarla biten ve sayıları yalnızca yeni bir 'y' dizisine koyan 'a' dizisinin tüm girişleri aramak.
{{#arraysearcharray:y |a |/^.*?(\d+)$/ |0 |-1 | $1 }}
Sayılarla biten ve bu öğelerin uzunluğunu yeni diziye koyan 'a' dizisinin tüm girişlerini aramak (bu, Regex Fun uzantısı gerektirir).
{{#arraysearcharray:y |y |/^.*?\d+$/e |0 |-1 | {{#len:$0}} }}
'a' dizisinden boş değerleri kaldırın.
{{#arraysearcharray:a|a|/\S+/}}

arrayslice

Bu işlev, bir diziden ('key' ile tanımlanır) yeni bir diziye ('new_key' ile tanımlanır) bir alt dizi çıkarır.

https://php.net/function.array-slice sayfasına bakın Sözdizimi:

{{#arrayslice:new_key|key|offset|length}}

Notlar:

  • Ofset, dilimin başlangıç noktasını belirtir, negatif olmayan bir sayı veya geriye doğru indeks için negatif bir sayı olabilir (örneğin, dizinin ofsetinin son elemanı -1'dir). Ofset, indeksten farklıdır (negatif olmayan bir sayı olmalıdır)
  • Uzunluk, kaç tane öğenin çıkarılacağını gösterir. Atlanırsa, dizi, ofsetten dizinin sonuna kadar her şeye sahip olacaktır.
  • Ofset dizi boyutundan küçük değilse boş dizi döndürülür, ofset negatif dizi boyutundan büyük değilse tüm öğeleri içeren yeni bir dizi döndürülür.

Örnekler:

Ofset 1'deki ögeden başlayarak iki ögeli bir dilim ayıklayın.
{{#arrayslice:x|b|1|2}}
Ofset -2'deki ögeden başlayarak iki ögeli bir dilim çıkarın.
{{#arrayslice:x|b|-2|2}}

Değişiklik

Yeni bir dizi oluşturmak yerine doğrudan diziyi değiştiren işlevler.

arrayunique

Bu işlev bir diziyi ('key' ile tanımlanır) bir kümeye dönüştürür (yinelenen üye yok, boş öge yok).

https://php.net/function.array-unique sayfasına bakın Sözdizimi:

{{#arrayunique:key}}

Örnek:

Diziyi sete dönüştürün.
{{#arrayunique:b}}

arrayreset

Bu işlev, tanımlanmış dizilerin bazılarını veya tümünü kaldıracaktır. Sözdizimi:

{{#arrayreset:}} <!-- TÜM dizilerin ayarını kaldıracak -->
{{#arrayreset:key1 |key2 |... |key-n }}

Notlar:

  • Bunlarda arraysize kullanmak, 0 yerine boş bir dize döndürür, bu nedenle gerçekten ayarlanmamışlar, boş değiller. Bir diziyi basitçe boşaltmak için {{#arraydefine:key}} kullanılabilir.
  • 1.4 sürümünden önce alfa ',', ayarlanmamış olması gereken birkaç diziyi ayırmak için kullanılır.

arraysort

Bu işlev, bir diziyi aşağıdaki sırayla sıralar.

Syntax:

{{#arraysort:key|order}}

Not:

  • Her dizi ögesi bir dize olarak ele alınır, bu, sayıların beklendiği gibi sıralanmayabileceği anlamına gelir.

Örnekler:

Bir diziyi sıralayın.
{{#arraysort:x|desc}}
Bir diziyi rastgele hâle getirin.
{{#arraysort:x|random}}
Bir diziyi ters çevirin.
{{#arraysort:x|reverse}}

Etkileşim

Sonuç olarak birden fazla diziyle çalışan, yeni bir dizi oluşturan veya var olanın üzerine yazan işlevler. Sürüm 2.0'dan bu yana, bu işlevler aynı anda yalnızca iki diziden daha fazlasıyla etkileşime girebilir. Yalnızca bir diziyle uğraşmaları durumunda, o dizinin bir kopyasını oluşturmaları yeterlidir. Var olmayan herhangi bir dizi, bu işlevler tarafından basitçe yok sayılır.

arraymerge

Bu işlev, iki veya daha fazla dizinin değerlerini yeni bir dizide birleştirir (new_key ile tanımlanır).

https://php.net/function.array-merge sayfasına bakın Sözdizimi:

{{#arraymerge:new_key |key1 |key2 |... |key-n }}

Örnekler:

İki diziyi birleştir.
{{#arraymerge:x |a |b }}
Bir diziyi çoğaltın (arraymerge değerinin üçüncü bağımsız değişkenini boş bırakın).
{{#arraymerge:x |b }}

arrayunion

Bu işlev, iki veya daha fazla dizinin değerlerini, yinelenen değerler olmadan yeni bir dizide (new_key ile tanımlanır) birleştirir. Sözdizimi:

{{#arrayunion:new_key |key1 |key2 |... |key-n }}

Notlar:

  • Bu bir küme operatörüdür, yani döndürülen dizi, yinelenen değerleri olmayan bir kümedir.
  • Bu, daha sonra arrayunique ile arraymerge olarak eşittir.

Örnek:

Üç dizinin birliği.
{{#arrayunion:x |a |b |c }}

arraydiff

Bu işlev, iki veya daha fazla dizinin (teorik küme) farkını hesaplar. Sonuç dizisi new_key ile tanımlanır. Döndürülen dizi, diğer dizilerin hiçbirinde tanımlanmayan ilk verilen dizinin (key1 ile tanımlanan) ögelerini içeren bir kümedir. https://php.net/function.array-diff sayfasına bakın

Sözdizimi:

{{#arraydiff:new_key |key1 |key2 |... |key-n }}

Not:

  • Bu bir küme operatörüdür, yani döndürülen dizi, yinelenen değerleri olmayan bir kümedir.
  • Bu işlev, alt sınıf ilişkisini test etmek için kullanılabilir.

Örnekler:

Fark (b-a)
{{#arraydiff:x |b |a }}
Fark (a-b)
{{#arraydiff:x |a |b }}
Fark (a-(b+c))
{{#arraydiff:x |a |b |c }}

arrayintersect

Bu işlev, iki veya daha fazla verilen dizinin küme teorik kesişimini hesaplar. Sonuç dizisi new_key ile tanımlanır. https://php.net/function.array-intersect sayfasına bakın

Sözdizimi:

{{#arrayintersect:new_key |key1 |key2 |... |key-n }}

Not:

  • Bu bir küme operatörüdür, yani döndürülen dizi, yinelenen değerleri olmayan bir kümedir.

Örnek:

x yeni diziye eklenen üç dizinin kesişimi
{{#arrayintersect:x |a |b |c }}

Kurulum

Yapılandırma

Arrays 2.0 iki yapılandırma değişkeni sunar:

$egArraysCompatibilityMode
(1.4 alfada $egArrayExtensionCompatbilityMode) true olarak ayarlandığında, bu, eski ArrayExtension 1.3.2 davranışını mümkün olduğunca geri getirecek olan uyumluluk modunu etkinleştirecektir. Bunun nedeni, Sürüm 2.0'da birkaç kırılma değişikliğinin getirilmiş olmasıdır. Dolayısıyla bu uyumluluk modunu kullanmak, 1.x'ten 2.x Arrays uzantısına sorunsuz bir geçiş sağlar. Varsayılan olarak, uyumluluk modu etkin değildir. Değişikliklerin bundan etkilendiği bir liste için Extension:Arrays/2.0 Öncesi Belgelendirmesi#Arrays 2.0'dan farklılıklar sayfasına bakın. Vikinizde eski ArrayExtension daha önce kullandıysanız, uyumluluk modu olmadan Arrays ile geçmeden önce o listeye bir göz atmak ve şablonlarınızı ayarlamak isteyebilirsiniz.
$egArraysExpansionEscapeTemplates
#arrayprint içine dahil edilen dizi değerleri içinde bir şablon veya ayrıştırıcı işlev çağrısı ile değiştirilmesi gereken bir anahtar/değer çifti karakter listesi içerir. Bu özel karakterleri, daha sonra genişletilecek olan dizeye değerleri dahil etmeden önce değiştirerek, dizi değerleri çevreleyen MW kodunun dikkatini dağıtamaz. Aksi takdirde dizi değerlerinin kendisi de ayrıştırılır. Varsayılan olarak bu, aşağıdaki şablon veya ayrıştırıcı işlev çağrılarıyla aşağıdaki karakterlerden kaçar:
  • = = {{=}} ("Template:=", '=' yazmalıdır)
  • | = {{!}} ("Template:!", '|' yazmalıdır)
Not Not: MW 1.24.0 ile başlayarak, amacına yeni {{!}} sihirli kelime tarafından hizmet edildiğinden "Template:!" oluşturmak artık gerekli değildir.
  • {{ = {{((}} ("Template:((", '{{' yazmalıdır)
  • }} = {{))}} ("Template:))", '}}' yazmalıdır)
Bu şablonların veya ayrıştırıcı işlevlerinin vikinizde bulunduğundan emin olun veya bu değişkeni buna göre değiştirin. Bu düzgün ayarlanmazsa, dizi değerlerinde bu karakter dizilerinden birinin kullanılması durumunda #arrayprint beklenmeyen değerler yazdırabilir.
$egArraysExpansionEscapeTemplates ayrıca basitçe null olarak ayarlanabilir, bu durumda bu karakter dizileriyle dizi değerlerinin verilen subject kodunu #arrayprint içinde bozulduğu 2.0 öncesi davranışa geri döner. Uyumluluk modu etkinse, bu her zaman null olarak ayarlanmış olarak değerlendirilir.

SSS

Dizi öğelerine yinelemeli erişim

#arrayprint veya Extension:Loops kullanarak bir dizinin ögelerine yinelemeli olarak erişmek mümkündür.

arrayprint kullanma

<!-- bir dizi tanımlayın -->
{{#arraydefine:colors|Red,Blue,Yellow}}

{{#arrayprint:colors||@@@@|<nowiki/>
* @@@@ uzunluğu: {{#len:@@@@}}
}}

Beklenen çıkış aşağıdadır:

  • Red uzunluğu: 3
  • Blue uzunluğu: 4
  • Yellow uzunluğu: 6

Daha fazla örnek eski Tetherless World Viki adresinde bulunabilir.

Anahtarları yeniden kullanma

Önceden tanımlanmış bir dizi yazdırıldıktan sonra, aynı anahtar sayfanın ilerisindeki başka bir dizi için yeniden kullanılabilir. Bu dizi gözlemlendiği sürece, her dizi için benzersiz bir anahtar tanımlamaya gerek yoktur.

Loops uzantısı kullanma

Daha karmaşık görevler için, Loops uzantısını kullanarak bir dizide dolaşmak mümkündür.

{{ #arraydefine: colors | red;#FF0000, green;#00FF00, blue;#0000FF }}
{{
  #loop: i
  | 0                       <!-- {{ #var:i }} için döngüler başlangıç değeri -->
  | {{ #arraysize:colors }} <!-- döngü sayısı -->
  | <nowiki/>
* {{
    #arraydefine: val | {{ #arrayindex:colors | {{ #var:i }} }} | ;
  }}
  <span style="color:{{ #arrayindex: val | 1 }}">
  {{ #arrayindex: val | 0 }}
  </span>
}}

Bu, şöyle bir çıkış verir:

  • red
  • green
  • blue

Extension:Semantic MediaWiki ile çalışmak

Bir diziyi anlamsal verilerle doldurmanın iki yolu vardır. Semantic Result Formats kullanan ilk çözüm, daha hızlı ve daha güvenilirdir, ayrıca kayıt verileri ve bir özellik için birden çok değer içeren karmaşık veri kümeleriyle de çalışır.

Extension:Semantic Result Formats kullanma

Semantic Result Formats (SRF), 1.6.1 sürümünde Array formatını tanıtır. Bir Extension:Arrays dizisinde otomatik olarak saklanacak verileri sorgulamak için kullanılabilir. Bu, dizilerdeki anlamsal verilerle ilgilenen tercih edilen çözümdür. Ayrıntılar semantic-mediawiki.org sayfasında bulunabilir.

Örnek:

{{#ask: [[Category:Color]][[:+]] |format=array |name=colors}}
{{#arrayprint: colors}}

Standart bir sorgu kullanma

Yukarıdaki SRF çözümünü kullanamıyorsanız, Arrays, liste biçimindeki bir SMW sorgu sonucunu kullanarak bir diziyi doldurmanıza da olanak tanır:

Örnek A: 'Color' sınıfının örneklerinin bir listesini oluşturmak için

{{#arraydefine:colors|{{#ask:[[Category:Color]][[:+]] |sep =, |limit=1000}} }}

Örnek B: 'has color' özelliğinin benzersiz bir değer listesi oluşturmak için

{{#arraydefine:colors|{{#ask:[[has color::+]][[:+]] |?color= |mainlabel=- |sep =, |limit=1000}} |,|unique}}

Örnek C: SWM sorgusu tarafından oluşturulan 2B diziyle ilgilenmek için (ör. kayıt tipi özellik)

given a 2D array "red;#da2021, yellow;#fcff00, green;#00ff00"

1. 'colors' dizisini oluşturun
{{#arraydefine:colors|red;#da2021, yellow;#fcff00, green;#00ff00}}

2. 'colors' ögesinin ilk öğesini başka bir 'colors0' dizisine bölün
{{#arraydefine:color0|{{#arrayindex:colors|0}}|;}}

Notlar:

  • anlamsal sorgu parametreleri
    • Anlamsal sorgunun döndürülen tüm sonuçlarını tüketmek için limit=1000 seçeneği kullanılır
    • Sonuçların girişleri için ayırıcı ayarlamak için sep=, seçeneği kullanılır
    • Sayfa sütununu kesmek için mainlabel=- seçeneği

Extension:DynamicPageList ile çalıştırmak

Yukarıda SMW için açıklanana benzer bir şekilde, DPL sorgusu sonuçlarını saklamak için Arrays uzantısı kullanılabilir. Örnekte, bir sonuç listesinin nasıl tersine çevrilebileceğini gösteriyoruz. Belirli bir şablonu içerdiklerinde belirli sayfalar tarafından kullanılan tüm parametre değerlerini topluyoruz. şablon parametre değeri ve sayfa adı çiftlerini saklıyoruz. Ardından diziyi sıralar ve çiftleri yazdırırız. Ardışık dizi ögeleri aynı ilk bölüme sahipse (yani parametre değerleri aynıysa), ilk bölüm yalnızca bir kez yazdırılır. Böylece basit bir ters çevrilmiş indeks oluşturabiliriz. Aynı mekanizma diğer problemlere de uygulanabilir.

Ayrıca bakınız