惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Palo Alto Networks Blog
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
Schneier on Security
Engineering at Meta
Engineering at Meta
I
InfoQ
L
LangChain Blog
Cyberwarzone
Cyberwarzone
T
Tenable Blog
WordPress大学
WordPress大学
P
Privacy & Cybersecurity Law Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
C
CERT Recently Published Vulnerability Notes
Scott Helme
Scott Helme
博客园 - 三生石上(FineUI控件)
酷 壳 – CoolShell
酷 壳 – CoolShell
Know Your Adversary
Know Your Adversary
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Last Watchdog
The Last Watchdog
Last Week in AI
Last Week in AI
Cloudbric
Cloudbric
S
SegmentFault 最新的问题
爱范儿
爱范儿
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 叶小钗
AI
AI
T
Tor Project blog
I
Intezer
T
Threatpost
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V
Visual Studio Blog
N
News and Events Feed by Topic
Latest news
Latest news
S
Security Affairs
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog RSS Feed
C
Cybersecurity and Infrastructure Security Agency CISA
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
S
Securelist

博客园 - 佛西亚

https访问 asp.net Core上传文件 .NET Framework 4.0 DLL注册GAC 使用iText 7读取PDF文件中的文本和图片 用SQL Server Profiler跟踪AX执行的SQL语句 D365升级包 Ant Design Pro V5 + Django Restful Framework Token认证前台实现 Ant Design Pro V5 + Django Restful Framework Token认证后台实现(二) Ant Design Pro V5 + Django Restful Framework Token认证后台实现(一) D365 FO产生随机字符串 D365 FO无法命中断点 Ant Design Pro V5 开发时使用后台服务数据 JavaScript跨域访问 同步数据库报错 DataEntity增加关联DataSource Java通过代理上传文件到Azure blob 使用iText7操作PDF D365 FO Json序列化和反序列化 D365 FO操作Azure Blob
D365 FO Array增加排序
佛西亚 · 2020-12-26 · via 博客园 - 佛西亚

X++的集合类,Array,List,Set里没有可以提供排序的功能,如果要对元素排序不是很方便。

D365 FO支持扩展,所以可以很方便地给这些集合类增加排序功能,这里以Array为例,只实现了数值和字符串的排序,至于class和record类型的,目前还没遇到需要排序的场景,就暂时不实现了,用到再说。

[ExtensionOf(classStr(Array))]
public final class Array_Class_Extension
{       
    /// <summary>
    /// 使用快速排序法对Array元素进行排序    
    /// </summary>
    public void sort()
    {
        this.quickSort(1, this.lastIndex());        
    }    
    private void quickSort(
      int _left, 
      int _right)
    {
        int i = _left;
        int j = _right;        
        if (i < j)
        {
            anytype pivot = this.value(i);
            while (i < j)
            {
                while (this.greaterThan(this.value(j), pivot) && (i < j))
                {
                    j--;
                }                
                this.value(i, this.value(j));                
                while (this.lessThanOrEqual(this.value(i), pivot) && (i < j))
                {
                    i++;
                }
                this.value(j, this.value(i));
            }
            this.value(i, pivot);
            this.QuickSort(_left, i - 1);
            this.QuickSort(j + 1, _right);
        }
    }

    private boolean greaterThan(
        anytype _valueLeft, 
        anytype _valueRight)
    {        
        switch (this.typeId())
        {
            case Types::Int64:
            case Types::Integer:
            case Types::Real:
                return _valueLeft > _valueRight;
            default:
                return strCmp(_valueLeft.toString(), _valueRight.toString()) == 1;
        }
    }

    private boolean lessThanOrEqual(
        anytype _valueLeft,
        anytype _valueRight)
    {
        switch (this.typeId())
        {
            case Types::Int64:
            case Types::Integer:
            case Types::Real:                
                return _valueLeft <= _valueRight;
            default:
                return strCmp(_valueLeft.toString(), _valueRight.toString()) == -1 
                        || strCmp(_valueLeft.toString(), _valueRight.toString()) == 0;
        }
    }

    /// <summary>
    /// 把排序后的数组以字符串方式拼接输出
    /// </summary>
    /// <param name = "_delimiter">元素之间的分隔符</param>
    /// <returns>排序后以分隔符连接的字符串</returns>
    public str sortString(str _delimiter = "")
    {
       this.sort();

        str destStr = "";
        for (int i = 1; i <= this.lastIndex(); i++)
        {
            destStr += this.value(i).ToString() + _delimiter;
        }
        if (_delimiter)
        {
            return subStr(destStr, 1, strLen(destStr) -1);
        }
        else
        {
            return destStr;
        }
    }

}