¿Fue útil?

Solución

Parece no entender algo. Lo que tenemos aquí es un matriz asociativa . Las matrices asociativas no tienen un orden explícita en ellos, por ejemplo, es sólo la representación interna (normalmente ordenadas) que les ordena.

En pocas palabras -. En Lua, tanto de las matrices se publican son mismo

¿Qué le gustaría que en cambio, es una representación como:

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

Si bien no se puede conseguir mediante el índice de ahora (que se indexan 1, 2, 3, 4, pero puede crear otra matriz de índice), puede ordenar usando table.sort.

A función de clasificación sería entonces:

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

table.sort(items, compare)

Otros consejos

Como dijo Komel, que está tratando con matrices asociativas, que no tienen garantiza el orden.

Si desea ordenar clave basada en su valor asociado al mismo tiempo preservar la funcionalidad de matriz asociativa, se puede hacer algo como esto:

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 es {} 1234,3188,1004,7007, y se puede acceder a sus datos de esta manera:

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

resultado:

1234     bar     
3188     baz     
1004     foo     
7007     quux    

hmm, se perdió la parte acerca de no ser capaz de controlar la iteración. hay

Pero en lua por lo general hay siempre una manera.

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

Eso es un comienzo. Ahora lo que se necesita para reemplazar los pares () que utiliza la biblioteca. Eso podría ser una simples como pares = my_pairs. A continuación, puede utilizar la solución en el foro

matrices de PHP son diferentes de tablas Lua.

  • Una matriz de PHP puede tener un lista ordenada de pares de clave y valor.

  • tabla A Lua siempre contiene un conjunto desordenado de pares de clave y valor.

Una tabla Lua actúa como una matriz cuando un programador elige utilizar números enteros 1, 2, 3, ... como claves. Las funciones de la sintaxis del lenguaje y de la biblioteca estándar, como table.sort ofrecen un apoyo especial para las tablas con claves enteros consecutivos.

Así que, si quieres emular una matriz PHP, usted tiene que representarlo utilizando lista de pares clave-valor, que es realmente una mesa de tablas, pero es más útil pensar en ella como una lista de claves pares-valor. Pasar una costumbre "menos que" la función de table.sort y usted estará listo.

N.B. Lua le permite mezclar llaves consecutiva enteros con cualquier otro tipo de llaves en el mismo mesa y la representación es eficiente. I utilizar esta función a veces, por lo general para etiquetar una matriz con unas pocas piezas de metadatos.

Al venir a este unos meses más tarde, con la misma consulta. La respuesta recomendada parecía identificar la brecha entre lo que se requiere y cómo se ve en LUA, pero no me consiguió lo que buscaba exactamente: -. Que fue un hash ordenados por clave

Las tres primeras funciones de esta página DID sin embargo: http://lua-users.org/wiki/ SortedIteration

lo hice hace una breve poco de Lua codificación de un par de años, pero ya no soy fluido en ella.

Cuando se enfrenta a un problema similar, he copiado mi matriz a otra matriz con claves y valores invertidos, entonces se utiliza sort en la nueva matriz.

I no era consciente de la posibilidad de ordenar la matriz utilizando el método Kornel Kisielewicz recomienda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top