【问题标题】:How to to sort a list of items? [duplicate]如何对项目列表进行排序? [复制]
【发布时间】:2020-05-04 16:41:17
【问题描述】:

C# 的新手,这太令人困惑了,我的代码可能不像某些人想要的那样整洁。请耐心等待,我正在学习。

我有一个名为“shoppingList”的“商品”列表。

单击“字母”按钮时,我想按“项目”类中的“名称”重新排列“购物清单”中的项目。重新排列列表后,将在表单上重新绘制列表。

我知道这里可能已经有解决方案,但是在尝试了这么多之后,我只是认为我的知识还不够。如果你还知道的话,请用宝贝和我说话。也很高兴提供更多信息。提前谢谢你

public partial class Form1:Form{
    List<Item> shoppingList = new List<Item>() { };
}

public class Item{
    public Item(string Name, int Amount)
{
        this.name = Name;
        this.amount = Amount;

    }

    public string getname() { return name; }
    public int getamount() { return amount; }

    public int amount;
    public string name;

}

private void alphabetical_Click(object sender, EventArgs e)
{
    //What to put here?
    ProcessAndDrawShoppingList();
}

【问题讨论】:

  • 只需为您想要的每种比较类型(名称、金额等)创建一个实现IComparer&lt;Item&gt; 的类。然后您可以拨打this.shoppingList.Sort(new ItemComparerByName());。请注意,如果仅用于演示目的,您可能希望保留应用排序(asc/desc)、过滤和您的 UI 可能需要的任何其他内容(例如分页)的列表的 视图
  • 我很确定当您输入问题时,Stack 上出现了很多类似的问题。我不敢相信你没有发现任何有用的东西。
  • 其实不是按字母顺序。我的代码也与其他人略有不同,因此我不太了解他们在做什么。如果这是其他语言就好了,但我的 C# 业余技能很出色。

标签: c# list sorting


【解决方案1】:

你不能只使用.OrderBy()函数吗?

所以在函数alphabetical_Click 中有类似的东西:

 var sortedList = shoppingList.OrderBy(x => x.Name);  // Guessing that this is the list but I don't know how you have access to it.

或者只是将原始列表设置为排序列表的值:

shoppinglist = shoppingList.OrderBy(x => x.Name).ToList();

或者,您可以使用.OrderByDescending() 以相反的方式订购。

我不知道在这种情况下列表是什么,但看起来您正在使用 Xamarin/Xamarin.Forms,所以只需从中获取列表并使用 OrderBy() 函数

【讨论】:

  • 我不知道我做得是否正确,但我已经按照 OrderBy() 上的一些示例进行了操作,虽然它已编译,但列表仍按创建顺序绘制。
  • 请注意,OrderBy 不会对原始列表进行排序,它会为您提供一个新的排序列表。
  • 您应该将OrderBy 的结果分配给某个变量,因为该函数不会修改您的列表,而只是创建一个新的一。
  • @LukeHowes 抱歉,OrderBy() 返回一个新的排序列表。我已经编辑了答案以显示您如何订购 shoppingList 来显示这一点。您可以创建一个新列表或将 shoppingList 设置为 orderly 的值
  • @JamesS OrderBy 会给你一个IEnumerable&lt;Item&gt; 而不是List&lt;Item&gt; 所以你不能就这样分配它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 2018-07-21
  • 2016-03-21
  • 2017-05-28
  • 1970-01-01
相关资源
最近更新 更多