吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 487|回复: 4
收起左侧

[经验求助] C# 两个数组同步排序

[复制链接]
夜雨闻笛 发表于 2024-4-20 14:26
25吾爱币
有一个类中有两个数组字段,一个为长度5的仓储物品名数组,一个为长度5的仓储物品值数组.
public class 仓库
{
   -----
   -----
   public 货物 物品名字组 =[金,银,铜,铁,锡];
   public uint 物品数量组 = [0,0,0,0,0];//下标0对应金数量,下标1对应银数量……类推,下标4对应锡数量


   -----
   -----
}


有一个显示的方法,如果物品数量组里对应下标数量不为零,就显示对应物品和数量.
显示方法逻辑很简单:
如果数量组下标0==0,则跳过,如果下标1==0则跳过……
如果不等于0,  则显示出来:  物品名字组[不为零的下标]+物品数量组[不为零的下标]


比如:某仓库物品数量组为:[0,200,0,800,300]
那么调用显示方法的时候,就会显示:   [银200,铁800,锡300]


我想要做的改进:
我希望显示的时候,可以优先显示数量多的个东西和它的数量.这样从大到小,看起来更舒适.
还是上面那个例子,我希望他能显示成:   [铁800,锡300,银200]   这个样子.


不知道有没有大佬提供一下比较高大上的代码实现(最好别用很多个if挨个去判断,这种方法我自己也能写)


最佳答案

查看完整内容

using System; using System.Linq; public class 仓库 { public string[] 物品名字组 = { "金", "银", "铜", "铁", "锡" }; public int[] 物品数量组 = { 0, 200, 0, 800, 300 }; public void 显示物品() { var 非零物品 = 物品名字组.Zip(物品数量组, (name, count) => new { Name = name, Count = count }) .Where(item => item.Count != 0) ...

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

dogface 发表于 2024-4-20 14:26
using System;
using System.Linq;

public class 仓库
{
    public string[] 物品名字组 = { "金", "银", "铜", "铁", "锡" };
    public int[] 物品数量组 = { 0, 200, 0, 800, 300 };

    public void 显示物品()
    {
        var 非零物品 = 物品名字组.Zip(物品数量组, (name, count) => new { Name = name, Count = count })
                                 .Where(item => item.Count != 0)
                                 .OrderByDescending(item => item.Count);

        string result = string.Join(", ", 非零物品.Select(item => $"{item.Name}{item.Count}"));

        Console.WriteLine($"[{result}]");
    }

    public static void Main(string[] args)
    {
        仓库 warehouse = new 仓库();
        warehouse.显示物品();
    }
}


这段代码使用了 LINQ 查询来实现你的需求。首先,使用 Zip 方法将物品名字数组和物品数量数组组合成一个元组序列。然后,使用 Where 过滤出数量不为零的物品,并且使用 OrderByDescending 方法按照数量降序排序。最后,使用 string.Join 方法将排序后的物品名字和数量组合成最终的结果字符串,并输出到控制台。
上面不是我写的,openai写的,它写的东西经常都会有点小问题,自己看能不能解决吧。
nect 发表于 2024-4-20 14:36
 楼主| 夜雨闻笛 发表于 2024-4-20 15:58
nect 发表于 2024-4-20 14:36
可以考虑用kv的排序,比较优雅,而且简单

大佬,我不是专业的程序员,只是平时工作中利用最基础的代码让工作简单一点(我的工作就是做表格,根本和代码不沾什么边),
所以不太懂你说的这些,你看你有时间的时候能不能用代码实现一下把代码发给我让我抄?
gu1001 发表于 2024-4-20 16:30
为了实现您的需求,我们可以采用一种更高效的方式来显示物品,即首先根据物品的数量对数组进行排序,然后再进行显示。下面是一个使用C#语言的示例代码,该代码使用了LINQ (Language Integrated Query) 来简化操作:

```csharp
using System;
using System.Collections.Generic;
using System.Linq;

public class 仓库
{
    public string[] 物品名字组 = {"金", "银", "铜", "铁", "锡"};
    public uint[] 物品数量组 = {0, 200, 0, 800, 300};

    public void 显示物品()
    {
        // 使用LINQ 对物品数量进行排序,并选择数量不为零的项
        var sortedItems = from item in 物品数量组
                          join name in 物品名字组 on item > 0
                          select new { 名称 = name, 数量 = item };

        // 按照数量降序排序
        var sortedItemsDescending = sortedItems.OrderByDescending(x => x.数量);

        // 构建显示字符串
        string displayString = string.Join(", ", sortedItemsDescending.Select(x => $"[{x.名称}{x.数量}]"));

        Console.WriteLine(displayString);
    }
}

public class Program
{
    public static void Main()
    {
        仓库 myWarehouse = new 仓库();
        myWarehouse.显示物品();
    }
}
```

这段代码首先定义了一个`仓库`类,其中包含两个数组:一个存储物品名称,另一个存储物品数量。`显示物品`方法使用了LINQ来组合这两个数组,并过滤出数量不为零的物品。然后,它使用`OrderByDescending`方法按数量降序排序这些物品。最后,它使用`string.Join`和字符串插值来构建最终的显示字符串。

在`Main`方法中,我们创建了`仓库`类的一个实例,并调用了`显示物品`方法来展示排序后的物品和数量。

请注意,这段代码使用了C#语言特性,如LINQ和字符串插值,这使得代码更加简洁和易于阅读。如果您使用的是其他语言或需要一个不使用LINQ的解决方案,请告知,我可以为您提供相应的代码示例。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-12 13:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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