0

在我的 GAE 应用程序中,我想创建一个 JDOQL,它返回一个列表,其中每个元素最多存在一次,即使在数据库中还有更多。我怎样才能做到这一点?

4

1 回答 1

0

我不了解 JDOQL,但是如果您想要一个每个实体最多存在一次的列表,即每个列表元素都是唯一的,那么您可以执行以下操作:

假设您有一个实体类型/模型类,我们称之为 Type,具有属性 att1、attr2。您希望拥有一个基于一个或多个属性的唯一元素列表,例如 attr2。

您可以使用我从一个很好的来源改编而来的以下方法:

def 唯一(seq,idfun=None):  
        ''' 一个以非常有效的方式返回唯一项目列表的函数  
        参考:http://www.peterbe.com/plog/uniqifiers-benchmark '''
        # 顺序保留
        如果 idfun 为无:
                def idfun(x): 返回 x
        见过={}
        结果 = []
        对于序列中的项目:
                标记= idfun(项目)
                # 在旧的 Python 版本中:
                # if seen.has_key(marker)
                # 但在新的:
                如果看到标记:继续
                看到[标记] = 1
                结果.追加(项目)
        返回结果

要从基于 attr2 的数据存储类型类型中获取唯一元素列表,我可以执行以下操作:

列表 = Type.all()

unique_list = unique(list,lambda t: t.attr2)

希望这会有所帮助,因为到目前为止它对我来说是最好的方法。

于 2010-12-10T10:44:22.910 回答