先根据一个条件排序,然后在第一个条件相等的情况下按另外一个条件排序

什么都不用说了,直接上代码:

实体类代码:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ShopListInfoBean {
    private String shopName = "";//店铺名
    private Double shopDistance;//计算的距离
    private Double shopCostPercent = 0.00;//价格比例
    
 	//构造
    public ShopListInfoBean(String shopName,Double shopDistance,Double shopCostPercent){
        shopName = this.shopName;
        shopDistance = this.shopDistance;
        shopCostPercent = this.shopCostPercent;
    }
}

实现Comparator接口:

/**
 * 当价格比例相同则比较距离,距离越小就越靠前
 * @version 1.0
 * @date 2021/1/19 14:52
 */
public class CompareByCost implements Comparator<ShopListInfoBean> {
    @Override
    public int compare(ShopListInfoBean o1, ShopListInfoBean o2) {
        int result = -1;
        Double shopCostPercent = o1.getShopCostPercent();
        Double shopCostPercent1 = o2.getShopCostPercent();
        Double shopDistance = o1.getShopDistance();
        Double shopDistance1 = o2.getShopDistance();
        if (shopCostPercent > shopCostPercent1) {
                result = 1;
        } else if (shopCostPercent.equals(shopCostPercent1)) {
            if (shopDistance > shopDistance1) {
                result = 1;
            }
            else if (shopDistance.equals(shopDistance1)){
                result = 0;
            }else {
                return result;
            }
        } else {
            return result;
        }
    return result;
    }
}

测试一波:

public static void main(String[] args) {
        ArrayList<ShopListInfoBean> shopListInfoBeans = new ArrayList<>();
        shopListInfoBeans.add(new ShopListInfoBean("店铺一",2.3,15.0));
        shopListInfoBeans.add(new ShopListInfoBean("店铺二",2.9,1.2));
        shopListInfoBeans.add(new ShopListInfoBean("店铺三",3.4,8.23));
        shopListInfoBeans.add(new ShopListInfoBean("店铺四",5.5,15.0));
        shopListInfoBeans.add(new ShopListInfoBean("店铺五",7.3,12.4));
        shopListInfoBeans.add(new ShopListInfoBean("店铺六",9.4,5.2));


        System.out.println("===============================排序之前的=======================================");
        for (ShopListInfoBean shopListInfoBean : shopListInfoBeans) {
            System.out.println(shopListInfoBean.getShopName()+" "+"距离:"+shopListInfoBean.getShopDistance()+" "+"比例:"+shopListInfoBean.getShopCostPercent());
        }

        System.out.println("===============================排序之后的=======================================");
        CompareByCost compareByCost = new CompareByCost();
        shopListInfoBeans.sort(compareByCost);
        for (ShopListInfoBean shopListInfoBean : shopListInfoBeans) {
            System.out.println(shopListInfoBean.getShopName()+" "+"距离:"+shopListInfoBean.getShopDistance()+" "+"比例:"+shopListInfoBean.getShopCostPercent());
        }

    }

看结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210120175907621.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTc1MzY4Mw==,size_16,color_FFFFFF,t_70

感谢阅读!!!

### 回答1: 可以使用 LINQ (Language Integrated Query) 在 Unity 中进行多条件排序。LINQ 是 .NET 的一个功能,提供了一种简单的方法来查询和操作数据。 要使用 LINQ 进行多条件排序,需要使用 OrderBy 和 ThenBy 这两个方法。 这是一个简单的例子,展示如何使用 LINQ 对列表中的对象进行多条件排序: ``` using System.Linq; // 定义一个类,包含两个排序字段:Name 和 Age。 public class Person { public string Name { get; set; } public int Age { get; set; } } void Example() { // 创建一个 Person 列表。 List<Person> people = new List<Person> { new Person { Name = "John", Age = 20 }, new Person { Name = "Jane", Age = 18 }, new Person { Name = "Bob", Age = 21 }, new Person { Name = "Alice", Age = 19 } }; // 使用 LINQ 进行多条件排序。 // 按照 Name 升序排序,然后按照 Age 降序排序。 var sortedPeople = people.OrderBy(p => p.Name).ThenByDescending(p => p.Age); // 输出排序后的结果。 foreach (var person in sortedPeople) { Console.WriteLine($"{person.Name}, {person.Age}"); } } ``` 输出结果如下: ``` Alice, 19 Bob, 21 Jane, 18 John, 20 ``` 希望这个例子对你有帮助。 ### 回答2: 使用Unity编写多条件排序方法可以通过自定义的比较器来实现。比较器是一种能够比较两个对象大小的类,我们可以根据自己的需求定义多个比较条件。 首,我们需要创建一个自定义的类作为比较器,该类需要继承`IComparer`接口,并实现其中的`Compare`方法。这个方法用于比较两个对象的大小,根据比较的结果返回一个整数。比如,返回-1表示第一个对象小于第二个对象,返回0表示两个对象相等,返回1表示第一个对象大于第二个对象。 然后,我们可以在排序时使用这个比较器来指定多个排序条件。比如,假设我们有一个包含多个对象的数组,每个对象都有一个整数类型的属性`score`和一个字符串类型的属性`name`。我们可以通过以下方式来实现多条件排序: 1. 创建自定义的比较器类`CustomComparer`,实现`IComparer`接口。 2. 在`Compare`方法中,比较两个对象的`score`属性,根据比较结果返回相应的整数。 3. 如果两个对象的`score`属性相等,则再比较它们的`name`属性,根据比较结果返回相应的整数。 4. 在排序时,使用`CustomComparer`来指定排序条件。 以下是一个示例代码: ``` using System.Collections.Generic; using UnityEngine; public class CustomComparer : IComparer<Object> { public int Compare(Object obj1, Object obj2) { // 比较score属性 int scoreCompare = obj1.score.CompareTo(obj2.score); if (scoreCompare != 0) { return scoreCompare; } // 如果score属性相等,则比较name属性 return obj1.name.CompareTo(obj2.name); } } void SortObjects(Object[] objects) { CustomComparer comparer = new CustomComparer(); System.Array.Sort(objects, comparer); } ``` 使用这个方法,我们可以根据不同的属性和排序条件,灵活地实现多条件排序,满足项目的需求。 ### 回答3: 在Unity中,可以使用C#编写一个条件排序方法。 首,创建一个排序方法的函数,并传入一个列表作为参数,以及排序依据的条件。例如,我们可以使用一个Person类的列表,并按照姓名和年龄进行排序。 ```csharp public void SortByConditions(List<Person> personList) { personList.Sort((person1, person2) => { // 按照姓名排序 int nameComparison = person1.name.CompareTo(person2.name); if (nameComparison != 0) { return nameComparison; } else { // 如果姓名相同,按照年龄排序 return person1.age.CompareTo(person2.age); } }); } ``` 上述代码使用了Lambda表达式来定义比较函数,首按照姓名排序,如果姓名相同则按照年龄排序。若需要增加更多的排序条件,只需在Lambda表达式中继续添加判断和比较即可。 假设我们有一个Person类,包含了姓名和年龄属性: ```csharp public class Person { public string name; public int age; } ``` 接下来,调用SortByConditions方法即可进行排序: ```csharp List<Person> personList = new List<Person>(); // 添加一些Person对象到列表中 // ... SortByConditions(personList); ``` 以上就是使用Unity编写一个条件排序方法的基本步骤。根据实际需要,可以根据不同的排序条件进行扩展和修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值