我有问题。我有一个包含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放在第二位!
答案 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},
};
输出
方案2:只有两个项目时
var list = new List<Coin>
{
new Coin{Name="USDT", Value = 29},
new Coin{Name="LTC", Value = 21},
};
答案 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
};