【问题标题】:Sorting an Array C#对数组进行排序 C#
【发布时间】:2018-04-20 00:46:47
【问题描述】:

我正在尝试在将坐标打印到控制台之前对数组进行排序。我试图根据 Y 坐标来使用 Ships 数组。我需要重新排序,以便按顺序打印它们。我尝试了 Array.Sort(myArray) - 失败了,我尝试转换为列表或字典,但不确定这是最好的方法。有什么建议吗?

Need to resort the Ships array

【问题讨论】:

  • Array.Sort(myArray) 失败到底是什么意思?有错误信息吗?实际结果是否与预期结果不同?如果是这样,怎么做?请提供一个例子,最好是一些实际的代码。
  • 数组有多少维?看这里。 msdn.microsoft.com/en-us/library/…
  • “我试过 Array.Sort(myArray) - 失败” 作为一个问题失败了。始终包括完整的错误详细信息、预期和实际结果等。
  • 船舶是类还是匿名对象?你能发布你的课程吗(如果有的话)。
  • 对不起,我以为图片会总结一下。尝试使用 Array.Sort() 时,我收到“无法比较数组中数组中的两个元素”,或者当尝试通过 orderby 或 orderbydescending 时,它会发现一个空值并崩溃。我正在根据用户选择的船更新网格 10 x 10(战舰板)。我想做的就是对数组进行排序,但我不知道如何。我可以看到调试器中发生的事情(提供屏幕截图)需要索引 1 变为索引 0,因为 Y 坐标更小。

标签: c# arrays sorting


【解决方案1】:

为了使 Array.Sort(myArray) 达到您的预期,myArray 的元素(我假设是船舶)需要具有可比性。那就是你需要指定你希望它们如何比较(大概是 Y 坐标)。

解决方法是让 ship 类实现 IComparable 接口或使用a different sort method,您可以单独定义要使用的比较器。

我无法提供示例代码,因为您的问题没有任何问题。

【讨论】:

    【解决方案2】:

    使用 LINQ OrderBy() 方法。假设你想按最后一个 BoardPosition 的 YCoordinate 排序,并且 YCoordinate 实现了IComparable(例如是一个int):

    using System.Linq;
    
    Ship[] ships;
    Ship[] sorted = ships.OrderBy(s => s.BoardPositions.Last().YCoordinate).ToArray();
    

    编辑 上面的代码假设Ship[] ships 中的每艘船,BoardPositions 中至少存在一个条目。如果BoardPositions 可能为空,请使用LastOrDefault() 和空条件运算符?.

    Ship[] sorted = ships
        .OrderBy(ship => ship.BoardPositions.Any())
        .ThenBy(ship => ship.BoardPositions.LastOrDefault()?.YCoordinate)
        .ToArray();
    

    【讨论】:

    • 收到以下错误:“对象引用未设置为对象的实例”
    • @Adam 您需要以某种方式初始化ships 数组。原代码你是怎么填的?
    • 它是私有集,只有公共获取 - 我不允许更改它。这是一种任务。
    • 我想问题是 BoardPositions 可能是空的,请参阅我的编辑。
    猜你喜欢
    • 2016-04-19
    • 2011-04-23
    • 2017-02-24
    • 2013-12-24
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    相关资源
    最近更新 更多