吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 426|回复: 2
收起左侧

[经验求助] 算法 C# 清除list表中某数据的最小值

[复制链接]
夜雨闻笛 发表于 2024-2-19 21:51
25吾爱币
public enum 金属种类{金,银,铜,铁}
public class 金属
{
     public 金属种类 种类 = "";
     public float 重量 = 0;
     public string 标识符 = "";//唯一标识符
}


假如现在有一个金属类list表,list<金属> = [金,金,银,铜,铜,铜,铁,铁,铁,铁];
现在我想把这个表中的四个铁删掉一个,删掉的规则就是四个铁中重量最少的那个。


我最开始用的方式是把整个表的顺序根据重量重排,然后从头遍历,第一个铁就是最轻的那个。但是这样就会把整个表的顺序全部打乱,但我并不想打乱,于是换了个方法:先遍历表,记录下所有的铁,将所有的铁全部添加在另一个表中。然后把另一个表根据重量排序后把最轻的那个铁的标识符记下来,再回到原来的表中重新遍历,找到那个标识符的铁,将他删掉。


确实能解决问题,但是一堆代码看着真的好蠢,有没有大神知道其他更加简单便捷的方式?

最佳答案

查看完整内容

using System; using System.Collections.Generic; using System.Linq; public enum 金属种类 { 金, 银, 铜, 铁 } public class 金属 { public 金属种类 种类; public float 重量; public string 标识符; // 唯一标识符 public 金属(金属种类 种类, float 重量, string 标识符) { this.种类 = 种类; this.重量 = 重量; this.标识符 = 标识符; } } class ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ETH 发表于 2024-2-19 21:51
using System;
using System.Collections.Generic;
using System.Linq;

public enum 金属种类 { 金, 银, 铜, 铁 }

public class 金属
{
    public 金属种类 种类;
    public float 重量;
    public string 标识符; // 唯一标识符

    public 金属(金属种类 种类, float 重量, string 标识符)
    {
        this.种类 = 种类;
        this.重量 = 重量;
        this.标识符 = 标识符;
    }
}

class Program
{
    static void Main()
    {
        List<金属> 金属列表 = new List<金属>
        {
            new 金属(金属种类.金, 10, "金1"),
            new 金属(金属种类.金, 20, "金2"),
            new 金属(金属种类.银, 15, "银1"),
            new 金属(金属种类.铜, 5, "铜1"),
            new 金属(金属种类.铜, 8, "铜2"),
            new 金属(金属种类.铜, 7, "铜3"),
            new 金属(金属种类.铁, 3, "铁1"),
            new 金属(金属种类.铁, 4, "铁2"),
            new 金属(金属种类.铁, 6, "铁3"),
            new 金属(金属种类.铁, 2, "铁4")
        };

        // 找到所有铁的标识符
        var 铁标识符 = 金属列表.Where(金属 => 金属.种类 == 金属种类.铁).Select(金属 => 金属.标识符).ToList();

        // 找到最轻的铁的标识符
        string 最轻的铁标识符 = 金属列表.Where(金属 => 铁标识符.Contains(金属.标识符)).OrderBy(金属 => 金属.重量).First().标识符;

        // 删除最轻的铁
        金属列表.RemoveAll(金属 => 金属.标识符 == 最轻的铁标识符);

        // 输出结果
        foreach (var 金属 in 金属列表)
        {
            Console.WriteLine($"种类: {金属.种类}, 重量: {金属.重量}, 标识符: {金属.标识符}");
        }
    }
}
ETH 发表于 2024-2-19 22:11

using System;
using System.Collections.Generic;
using System.Linq;

public enum 金属种类 { 金, 银, 铜, 铁 }

public class 金属
{
public 金属种类 种类;
public float 重量;
public string 标识符; // 唯一标识符

public 金属(金属种类 种类, float 重量, string 标识符)
{
    this.种类 = 种类;
    this.重量 = 重量;
    this.标识符 = 标识符;
}

}

class Program
{
static void Main()
{
List<金属> 金属列表 = new List<金属>
{
new 金属(金属种类.金, 10, "金1"),
new 金属(金属种类.金, 20, "金2"),
new 金属(金属种类.银, 15, "银1"),
new 金属(金属种类.铜, 5, "铜1"),
new 金属(金属种类.铜, 8, "铜2"),
new 金属(金属种类.铜, 7, "铜3"),
new 金属(金属种类.铁, 3, "铁1"),
new 金属(金属种类.铁, 4, "铁2"),
new 金属(金属种类.铁, 6, "铁3"),
new 金属(金属种类.铁, 2, "铁4")
};

    // 找到所有铁的标识符
    var 铁标识符 = 金属列表.Where(金属 => 金属.种类 == 金属种类.铁).Select(金属 => 金属.标识符).ToList();

    // 找到最轻的铁的标识符
    string 最轻的铁标识符 = 金属列表.Where(金属 => 铁标识符.Contains(金属.标识符)).OrderBy(金属 => 金属.重量).First().标识符;

    // 删除最轻的铁
    金属列表.RemoveAll(金属 => 金属.标识符 == 最轻的铁标识符);

    // 输出结果
    foreach (var 金属 in 金属列表)
    {
        Console.WriteLine($"种类: {金属.种类}, 重量: {金属.重量}, 标识符: {金属.标识符}");
    }
}

}



这段代码首先找到所有铁的标识符,然后找到最轻的铁的标识符,最后将最轻的铁从列表中删除,并输出结果。这种方法相对简洁,不会改变原始列表的顺序。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-11 15:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表