现在,我的代码如下:
select * from table(apex_string.split('THIS:IS:GREAT',':'));
但这只是按UF排序,这是我数组中的许多键之一。我将如何包含另一个键,以便它与UF排序相同?
答案 0 :(得分:0)
通过项的任意转换(例如,与字典中特定键对应的值或项的属性)进行排序的经典方法是Decorate-Sort-Undecorate模式。
其工作方式是,首先用一个元组替换它们来“装饰”列表中的项目,该元组以要排序的每个值开头(最高有效位在前),然后以原始值结束。 / p>
然后您像往常一样对列表进行排序,直接比较项目(就像在对数字列表进行排序一样)。
最后,对转换后的值列表进行排序后,您可以反转应用于项目的转换,丢弃不再需要的元组和值,而只保留原始项目。
这是将其添加到quickSort
函数中的方法。在这里,我假设uf
是一个包含您关心的所有键的序列:
def quickSort(lista,inicio,fim):
for i, value in enumerate(lista): # decorate step
lista[i] = tuple(value[x] for x in uf) + (i, lista) # index i used as final tiebreaker
pilha = []
pilha.append((inicio,fim))
while pilha:
pos = pilha.pop()
fim, inicio = pos[1], pos[0]
piv = partition(lista,inicio,fim)
if piv-1 > inicio:
pilha.append((inicio,piv-1))
if piv+1 < fim:
pilha.append((piv+1,fim))
for i, value in enumerate(lista): # undecorate step
lista[i] = value[-1]
您将需要更改partition
函数以直接比较项目,而不是通过uf
进行索引。
稍微复杂一点的方法将删除全局查找的uf
键序列,而使用key
函数。该函数可以执行任何所需的操作,只要它返回一个可比较的值即可。装饰步骤将变为lista[i] = (key(value), i, value)
。这就是Python的内置排序代码的工作方式(尽管它不使用quicksort)。