首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按第二列重新排序csv,区分大小写

按第二列重新排序csv,区分大小写
EN

Stack Overflow用户
提问于 2014-02-07 15:38:09
回答 1查看 133关注 0票数 0

我在csv文件(OID,SN)中有一个很长的订单in列表,后面是它们的序列号。我需要按序列号对列表进行排序,它使用base58,因此大写字母排在小写字母之前。

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz :Base58

只是在做

代码语言:javascript
运行
复制
 IEnumerable<string> query =
    from line in serialNumbers
    let x = line.split(',')
    orderby x[1]
    select x[0] + "," + x[1];

 string[] temp = query.ToArray();

按字母顺序排序,但不是按Base58顺序排序。我该如何做到这一点?使用C#。

EN

回答 1

Stack Overflow用户

发布于 2014-02-07 16:24:16

您可以定义自定义比较器,例如:

代码语言:javascript
运行
复制
    class Base58Comparer : IComparer<string>
    {
        public int Compare(string x, string y)
        {
            if (object.ReferenceEquals(x, y))
                return 0;
            if (object.ReferenceEquals(x, null))
                return -1;
            if (object.ReferenceEquals(y, null))
                return 1;

            int minLen = Math.Min(x.Length, y.Length);
            for (int i = 0; i < minLen; i++)
            {
                // comparison based on ASCII value
                int comp = x[i].CompareTo(y[i]); 
                if (comp != 0)
                    return comp;
            }
            return x.Length - y.Length;
        }
    }

然后您可以将其传递给OrderBy方法,例如:

代码语言:javascript
运行
复制
var query = serialNumbers.Select(line => line.Split(','))
                         .OrderBy(x => x[1], new Base58Comparer())
                         .Select(x => x[0] + "," + x[1]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21621943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档