我有一个从大到小的有序列表。
{ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }我想要一份这样的清单
{ 10, 8, 6, 4, 2, 1, 3, 5, 7, 9 }如果您可以看到,新的顺序是,首先按每个奇数索引升序,然后按每个偶数索引降序。
这个想法是,列表的每一半都具有大致相同的权重。e.g
{ 10, 8, 6, 4, 2 } = 30
{ 1, 3, 5, 7, 9 } = 25标题是我能用一句话解释的最好的答案,这就是为什么我在谷歌上找不到答案的原因。
这是我在C#中的go。我欢迎对我的尝试的任何评论,但我只查看算法名称,如果它有一个的话。
var firstHalf = new List<string>();
var secondHalf = new List<string>();
for (int i = 0; i < originalList.Count; i++)
{
if (i % 2 == 1)
{
firstHalf.Add(originalList[i]);
}
else
{
secondHalf.Add(originalList[i]);
}
}
secondHalf.Reverse();
var finalList = new List<string>(firstHalf);
finalList.AddRange(secondHalf);发布于 2015-02-07 20:35:20
这可能不是最有效的方法,但它很简单:
var yourlist = originalList.Where(i => i % 2 == 0)
.OrderBy(i => i)
.Concat(originalList.Where(i => i % 2 != 0)
.OrderByDescending(i => i))
.ToList();https://stackoverflow.com/questions/28382073
复制相似问题