【问题标题】:How to sort an array depending on the other array [duplicate]如何根据另一个数组对数组进行排序[重复]
【发布时间】:2020-12-04 11:10:24
【问题描述】:

您好,我有 2 个数组,它们的值相同,但顺序不同,我想根据另一个数组对 1 个数组进行排序,您能帮我看看如何做到这一点。

代码:

1 数组是 string[] abc = []; 和其他数组是项目,如下面的代码所示。正如我所说,两者具有相同数量的值

return new PdfGenerationRequest
            {
                Email = userEmail,
                FileName = zipName,
                AppName = appName,
                Period = period,
                Year = year,
                Quarter = quarter,
                TemplateTypeId = templateTypeId,
                WPGroup = wpGroup,
                MyDealsOnly = myDealsOnly,
                Watermark = watermark,
                Items = items.OrderBy(x => x.FileName).ToArray()
            };

目前我正在根据项目数组按升序排序。 请建议我如何根据 abc 数组对 items 数组进行排序。

所以对于前:

Abc 有 3 个元素,即 Apple、Cat、Bat

并且 items 有 3 个元素,分别是 cat、bat、apple

但在这里我想根据 ABC 对 items 数组进行排序。所以这里项目的最终结果应该是 Apple、Cat、Bat

【问题讨论】:

  • 我不明白这个问题。你能添加你尝试过的代码吗
  • @JonathanAlfaro 我为此添加了一个示例。我实际上是新手,希望这个例子可以帮助你
  • 我也是,我不明白你想要什么..
  • 我看不出您包含的代码与问题有什么关系。您是在谈论特定的属性吗?哪一个?
  • 你的代码看起来像一个匿名内部类,但你说的是一个数组

标签: c# asp.net-core


【解决方案1】:

问题的措辞有点令人困惑,如果您正在寻找不区分大小写的比较,则并不完全清楚,但要脱离这个陈述:

"abc 有 3 个元素:{"Apple", "Cat", "Bat"}items 有 3 个元素是 {"cat", "bat", "apple"} [并且] 我想根据 abc 对其进行排序

相互比较的方法是使用第一个数组中项目的index对第二个数组进行排序,我们可以使用Array.IndexOf方法来做到这一点。例如:

var abc = new [] {"Apple", "Cat", "Bat"};
var items = new[] {"Cat", "Bat", "Apple"};

items = items
    .OrderBy(item => 
        abc.Contains(item) ? Array.IndexOf(abc, item) : int.MaxValue)
    .ToArray();

// Now items = {"Apple", "Cat", "Bat"}

请注意,如果Contains 返回false,我们使用三元运算符?: 返回int.MaxValue,这会将不在abc 中的所有项目放在排序顺序的末尾。


但在您的示例中,您表明items 实际上包含abc 中字符串的小写 版本。如果是这种情况并且您想通过不区分大小写的比较来匹配它们,获取索引的一种方法是使用System.Linq 扩展方法Selectabc 获取项目及其索引,然后使用不区分大小写的比较查找与 items 中的当前项目匹配的 FirstOrDefault 项目:

var abc = new [] {"Apple", "Cat", "Bat"};
var items = new[] {"cat", "bat", "apple"};

items = items.OrderBy(i => abc.Select((item, index) => new {item, index})
    .FirstOrDefault(a => 
        i.Equals(a.item, StringComparison.OrdinalIgnoreCase))?.index ?? int.MaxValue)
    .ToArray();

// Now items = {"apple", "cat", "bat"}

请注意,如果项目不存在,FirstOrDefault 将返回 null,因此我们使用 ?.?? 运算符再次返回 int.MaxValue不在排序顺序末尾的abc 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-03
    • 2013-10-22
    • 2013-12-24
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多