以特定方式订购列表

时间:2019-06-07 14:28:50

标签: c# list

我有问题。我有一个包含4个硬币和4个值的列表。现在,列表按如下名称排序:

 1. BTC---Value
 2. ETH---Value
 3. LTC---Value
 4. USDT---Value

但是现在我想得到仅剩2个硬币的清单: 最后一个硬币需要是USDT,第一个硬币是价值最高的硬币。因此,例如,如果所有硬币的价值为3,而BTC的价值为4,那么我想要一个这样的列表:

 1. BTC---Value
 2. USDT---Value

我该怎么做,因为我知道如何按值排序,但不了解我的所有偏好。...

有人可以帮我吗?

详细信息
即使USDT的价值最高,我也希望最后那枚硬币。如果您添加其他硬币,则只需再次查看最高值(USDT除外),然后将该硬币放在顶部,USDT放在第二位!

4 个答案:

答案 0 :(得分:2)

基于DubDub的评论更新的代码。

 var intermediate =  list.OrderBy(x=> x.Name=="USDT").ThenByDescending(x=>x.Value);
 var result = new []{intermediate.First(),intermediate.Last()};

例如, 方案1:当有两个以上项目时

 var list = new List<Coin>
 {
    new Coin{Name="USDT", Value = 29},
    new Coin{Name="ETH", Value = 13},
    new Coin{Name="LTC", Value = 21},
    new Coin{Name="BTC", Value = 3},
 };

输出

enter image description here

方案2:只有两个项目时

 var list = new List<Coin>
 {
    new Coin{Name="USDT", Value = 29},
    new Coin{Name="LTC", Value = 21},
 };

enter image description here

答案 1 :(得分:1)

您可以使用Linq做到这一点。这不会修改列表,而是会创建一个根据您的条件排序的新枚举。

var sortedCoins = coins.OrderBy(c => c.Name == "USDT").ThenByDescending(c => c.Value);

答案 2 :(得分:0)

这种方式:

class Program
{
    static void Main(string[] args)
    {
        List<Coin> coins = new List<Coin>()
        {
            new Coin ("BTC", 1),
            new Coin ("ETH", 2),
            new Coin ("LTC", 3),
            new Coin ("USDT", 4),
        };

        Coin usdt = coins.First(x => x.Name == "USDT");

        coins.Remove(usdt);

        coins = new List<Coin>() { coins.OrderByDescending(x => x.Value).First(), usdt };
    }
}

public class Coin
{
    public string Name { get; set; }
    public double Value { get; set; }

    public Coin(string name, double value)
    {
        Name = name;
        Value = value;
    }
}

答案 3 :(得分:0)

使用从以前消失的先前答案中获得的以下失窃课程,所以我不确定谁应该归功于谁,但您应该可以执行以下操作。

硬币类

public class Coin
{
    public string Name { get; set; }
    public double Value { get; set; }
}

用于处理列表的实际代码

List<Coin> list = new List<Coin>
{
    new Coin{Name="USDT", Value = 29},
    new Coin{Name="ETH", Value = 13},
    new Coin{Name="LTC", Value = 21},
    new Coin{Name="BTC", Value = 3},
};

// Take out USDT coin
Coin USDTcoin = list.Find(coin => coin.Name == "USDT");
list.RemoveAt(list.FindIndex(coin => coin.Name == "USDT"));

// Order list
list = list.OrderByDescending(coin => coin.Value).ToList();

// Make new list
list = new List<Coin>
{
    list[0],
    USDTcoin
};