È stato utile?

Soluzione

Ti sembra di fraintendere qualcosa. Quello che abbiamo qui è un array associativo . array associativi non hanno alcun ordine esplicito su di loro, per esempio è solo la rappresentazione interna (di solito allineati) che li ordina.

In breve -. In Lua, entrambe le matrici hai postato sono stesso

Che cosa si vorrebbe, invece, è una tale rappresentazione:

items = {
    {1004, "foo"},
    {1234, "bar"},
    {3188, "baz"},
    {7007, "quux"},
}

Anche se non è possibile ottenere in base all'indice di ora (sono indicizzati 1, 2, 3, 4, ma possono creare un altro array indice), è possibile ordinare utilizzando table.sort.

Una funzione di ordinamento sarebbe allora:

function compare(a,b)
  return a[1] < b[1]
end

table.sort(items, compare)

Altri suggerimenti

Come ha detto Komel, hai a che fare con gli array associativi, che non hanno ordinamento garantito.

Se si desidera ordinamento chiave in base al suo valore associato allo stesso tempo preservando la funzionalità array associativo, si può fare qualcosa di simile:

function getKeysSortedByValue(tbl, sortFunction)
  local keys = {}
  for key in pairs(tbl) do
    table.insert(keys, key)
  end

  table.sort(keys, function(a, b)
    return sortFunction(tbl[a], tbl[b])
  end)

  return keys
end

items = {
    [1004] = "foo",
    [1234] = "bar",
    [3188] = "baz",
    [7007] = "quux",
}

local sortedKeys = getKeysSortedByValue(items, function(a, b) return a < b end)

sortedKeys è {} 1234,3188,1004,7007, ed è possibile accedere ai dati in questo modo:

for _, key in ipairs(sortedKeys) do
  print(key, items[key])
end

Risultati:

1234     bar     
3188     baz     
1004     foo     
7007     quux    

hmm, perse la parte di non essere in grado di controllare l'iterazione. ci

Ma in lua di solito c'è sempre un modo.

http://lua-users.org/wiki/OrderedAssociativeTable

Quello è un inizio. Ora si avrebbe bisogno per sostituire le coppie () che la biblioteca utilizza. Questo potrebbe essere un semplici come coppie = my_pairs. È quindi possibile utilizzare la soluzione nel link qui sopra

array PHP sono diverse dalle tabelle Lua.

  • Un array PHP può avere un ordinato elenco di coppie di valori-chiave.

  • tabella A Lua contiene sempre un insieme non ordinato di coppie di valori-chiave.

tabella A Lua funge da matrice quando un programmatore sceglie di utilizzare interi 1, 2, 3, ... come tasti. Le funzioni di sintassi e linguaggio libreria standard, come table.sort offrono un supporto speciale per le tabelle con i tasti consecutivi interi.

Quindi, se si desidera emulare un array PHP, dovrete rappresentarlo mediante lista di coppie chiave-valore, che è davvero una tabella di tavoli, ma è più utile pensare ad esso come una lista di chiave coppie -value. Passare un personalizzato "meno-che" la funzione di table.sort e sarete tutti insieme.

NB. Lua consente di Mix chiavi consecutivi interi con qualsiasi altro tipo di chiavi nel stesso tavolo e la rappresentazione è efficiente. Io uso questa caratteristica a volte, di solito per etichettare un array con alcuni pezzi di metadati.

Venendo a questo un paio di mesi più tardi, con la stessa query. La risposta consigliata sembrava di individuare il divario tra ciò che è stato richiesto e come questo aspetto in LUA, ma non mi ha ottenuto ciò che cercavo esattamente: -. Che era un Hash ordinati per chiave

I primi tre funzioni in questa pagina ha tuttavia: http://lua-users.org/wiki/ SortedIteration

Ho fatto una breve po 'di Lua codifica di un paio di anni fa, ma io non sono più fluente in esso.

Di fronte a un problema simile, ho copiato il mio allineamento ad un altro array con chiavi e valori invertiti, quindi usato sort sul nuovo array.

Non ero a conoscenza di una possibilità di ordinare la matrice utilizzando il metodo Kornel Kisielewicz consiglia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top