繁体   English   中英

如何使用List按长度对字符串进行排序<string> 。种类?

[英]How to sort strings by length using List<string>.Sort?

我想按长度对我的字符串列表进行排序

var weasleys = new List<string>{"Bill", "Charlie", "Percy", "Fred", "George", "Ron", "Ginny"};

我知道如何使用OrderBy做到这一点。

weasleys.OrderBy(x => x.Length)

但我想知道如何使用List<T>.Sort 如何?

有一个Sort(Comparison<T>)重载 ,该重载需要一个Comparison<T>委托。 这样,您就可以在相应的Length值上使用CompareTo方法:

weasleys.Sort((x, y) => x.Length.CompareTo(y.Length));

请注意,与LINQ OrderBy方法不同,如果您打算这样做,则Sortweasleys更改weasleys List。

这应该做

var weasleys = new List<string>{"Bill", "Charlie", "Percy", "Fred", "George", "Ron", "Ginny"};
var t = weasleys.OrderBy(x => x.Length).ToList<string>();

您可以使用数组列表执行此操作...

public class SortStringLength : IComparer
    {
        public int Compare(Object s1, Object s2)
        {
            if (s1.ToString().Length == s2.ToString().Length)
                return String.CompareOrdinal(s1.ToString(), s2.ToString());
            if (s1.ToString().Length > s2.ToString().Length)
                return 1;
            return -1;
        }
    }

然后,使用IComparer ...

static void Main(string[] args)
        {
            var weasleys = new ArrayList { "Bill", "Charlie", "Percy", 
                  "Fred", "George", "Ron", "Ginny" };
            var sortLength = new SortStringLength();
            weasleys.Sort(sortLength);

            foreach (var weasley in weasleys)
            {
                Console.WriteLine(weasley);
            }

            Console.ReadLine();
        }

有清单...

public class SortStringLength : IComparer<string>
{
    public int Compare(string x, string y)
    {
        if (x.Length == y.Length)
            return String.CompareOrdinal(x, y);
        if (x.Length > y.Length)
            return 1;
        return -1;
    }
}

和用法...

static void Main(string[] args)
        {
            var weasleys = new List<string> { "Bill", "Charlie", "Percy", 
                       "Fred", "George", "Ron", "Ginny" };
            var sortLength = new SortStringLength();
            weasleys.Sort(sortLength);

            foreach (var weasley in weasleys)
            {
                Console.WriteLine(weasley);
            }

            Console.ReadLine();
        }
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

public class Program
{
    public static void Main()
    {
        List<string> dictionary = new List<string>() { "aaa", "aaaa", "a", "aa" };
        var orderedDic = dictionary.Select(x => new
          {
            val = x,
            length = x.Length
          }).OrderBy(x => x.length).ToList();
        dictionary = orderedDic.Select(x => x.val).ToList();
        Console.WriteLine(string.Join(",", dictionary));
     }
}

我在这里使用的方法

  1. 创建了一个带有 val 和 length 属性的匿名对象列表。
  2. 按长度排序列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM