【问题标题】:How to sort an ArrayCollection by values如何按值对 ArrayCollection 进行排序
【发布时间】:2012-08-29 14:11:11
【问题描述】:

我有一个 ArrayCollection 中的项目列表,我想按某个值(非字母顺序)排序。可以这样排序吗?

以下是我想要排序的值:

已解决
关闭
打开

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
除了提供的答案
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~

如果您的数组集合是 DataGrid 的一部分,那么您可以在 DataGrid 的 GridColumn 上设置 sortCompareFunction。请注意,此排序比较函数的语法不同,因为传入的是网格列而不是字段。

示例代码
用于 Spark DataGrid

        private var desiredItemOrder:Array = ["In Progress", "Open", "Resolved", "Closed"];

        private function sortCompareFunction(item:Object, anotherItem:Object, column:GridColumn = null):int
        {
            var itemIndex:Number = desiredItemOrder.indexOf(item.fields.status.name);
            var anotherItemIndex:Number = desiredItemOrder.indexOf(anotherItem.fields.status.name);

            if (itemIndex == -1 || anotherItemIndex == -1)
                throw new Error("Invalid value for criticality ");
            if (itemIndex == anotherItemIndex)
                return 0;
            if (itemIndex > anotherItemIndex)
                return 1;
            return -1;
        }


        <s:DataGrid dataProvider="{issuesCollection}">
            <s:columns>
                <s:ArrayList>
                    <s:GridColumn dataField="fields.status.name" headerText="Status" sortCompareFunction="sortCompareFunction"/>
                </s:ArrayList>
            </s:columns>
        </s:DataGrid>

文档
Sort compareFunction
DataGridColumn sortCompareFunction
GridColumn sortCompareFunction

【问题讨论】:

  • 简短的回答是使用 sortCompareFunction;如需更长的答案,请查看另一个问题;或在这些文档中:help.adobe.com/en_US/flex/using/…
  • 谢谢。相关问题有所帮助。顺便说一句,我在您链接的页面上的 sortCompareFunction 上没有看到任何内容,但我在该页面上的链接 help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… 上的 compareFunction 上找到了一些内容。
  • 关于重复问题,该问题提供了一个没有进一步信息的解决方案,但仅此一项并没有给我我正在寻找的细节。感谢您提供的文档链接。

标签: apache-flex sorting flex4 arraycollection


【解决方案1】:

这可能对你有一些帮助

Sorting an ArrayCollection in Flex

【讨论】:

    【解决方案2】:

    如果您只想对 3 个单词进行排序 - 请在排序函数中进行比较,例如:

    private static var valuesOrder : Array = ["Resolved", "Closed", "Open"];
    private function sortFunction(a:Object, b:Object, array:Array = null) : int{
        var indexA : int = valuesOrder.indexOf(a);
        var indexB : int = valuesOrder.indexOf(b);
        return indexA - indexB;//return positive if indexA > indexB
    }
    var sort : Sort = new Sort();
    sort.compareFunction = sortFunction;
    arrayCollection.sort = sort;
    arrayCollection.refresh();
    

    注意,如果 valuesOrder 数组中不存在值 - 索引将为 -1。随心所欲地处理这种情况。

    【讨论】:

      猜你喜欢
      • 2016-01-13
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多