gpt4 book ai didi

c# - 在 C# 中,如何对 "largest"值位于列表中间的列表中的项目进行排序

转载 作者:可可西里 更新时间:2023-11-01 08:19:27 26 4
gpt4 key购买 nike

我被这个问题困扰了一段时间。我想获取一个列表并对其进行排序,以使价格最高的产品最终位于列表的中间。我也想做相反的事情,即确保价格最高的项目最终位于列表的外边界。

想象这样一个数据结构.. 1,2,3,4,5,6,7,8,9,10

在第一种情况下,我需要取回 1,3,5,7,9,10,8,6,4,2在第二种情况下,我需要取回 10,8,6,4,2,1,3,5,7,9

列表可能有250条以上,数字不会均匀分布,也不会按顺序排列,我想尽量减少复制。这些数字将包含在 Product 对象中,而不是简单的原始整数。

是否有我没有看到的简单解决方案?

任何想法。

所以对于那些想知道我在做什么的人,我正在根据计算的字体大小订购商品。这是我使用的代码...

实现...

private void Reorder()
{
var tempList = new LinkedList<DisplayTag>();
bool even = true;
foreach (var tag in this) {
if (even)
tempList.AddLast(tag);
else
tempList.AddFirst(tag);

even = !even;
}

this.Clear();
this.AddRange(tempList);
}

测试...

[TestCase(DisplayTagOrder.SmallestToLargest, Result=new[]{10,14,18,22,26,30})]
[TestCase(DisplayTagOrder.LargestToSmallest, Result=new[]{30,26,22,18,14,10})]
[TestCase(DisplayTagOrder.LargestInTheMiddle, Result = new[] { 10, 18, 26, 30, 22, 14 })]
[TestCase(DisplayTagOrder.LargestOnTheEnds, Result = new[] { 30, 22, 14, 10, 18, 26 })]
public int[] CalculateFontSize_Orders_Tags_Appropriately(DisplayTagOrder sortOrder)
{
list.CloudOrder = sortOrder;
list.CalculateFontSize();

var result = (from displayTag in list select displayTag.FontSize).ToArray();
return result;
}

用法...

public void CalculateFontSize()
{
GetMaximumRange();
GetMinimunRange();
CalculateDelta();

this.ForEach((displayTag) => CalculateFontSize(displayTag));

OrderByFontSize();
}

private void OrderByFontSize()
{
switch (CloudOrder) {
case DisplayTagOrder.SmallestToLargest:
this.Sort((arg1, arg2) => arg1.FontSize.CompareTo(arg2.FontSize));
break;
case DisplayTagOrder.LargestToSmallest:
this.Sort(new LargestFirstComparer());
break;
case DisplayTagOrder.LargestInTheMiddle:
this.Sort(new LargestFirstComparer());
Reorder();
break;
case DisplayTagOrder.LargestOnTheEnds:
this.Sort();
Reorder();
break;
}
}

最佳答案

LinkedList 是合适的数据结构,因为它允许您高效地向任一端添加:

        LinkedList<int> result = new LinkedList<int>();

int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

Array.Sort(array);

bool odd = true;

foreach (var x in array)
{
if (odd)
result.AddLast(x);
else
result.AddFirst(x);
odd = !odd;
}

foreach (int item in result)
Console.Write("{0} ", item);

没有额外的复制步骤,没有反向步骤,......每个节点的存储开销很小。

关于c# - 在 C# 中,如何对 "largest"值位于列表中间的列表中的项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com