Array的排序方法sort,用法注意点

在ruby中Array的排序方法sort用法注意点

Returns a new array created by sorting self. Comparisons for the sort will be done using the <=> operator or using an optional code block. The block implements a comparison between a and b, returning -1, 0, or +1. See also Enumerable#sort_by.

a = [ "d", "a", "e", "c", "b" ]
a.sort #=> ["a", "b", "c", "d", "e"]
a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
以上是ruby api的说明;

我在模拟一个双色球号码生成器的case时候

def create_num
@nums = Array.new

#先选择6个红球/33球
while @nums.length < 6
@num = rand(32) + 1
unless @nums.delete(@num)
@nums << @num
end
end

#前面6个排序
@nums.sort

#后选择1个篮球/16球
@nums << rand(15) + 1
end

p create_num


我以为排序后的原数组对象会想java工具类Arrays.sort一样排一下就OK了.

public class TestCase {
final static String[] a = new String[]{"a", "g", "d", "k", "f"};
public static void main(String[] args) {
String[] b = new String[]{"a", "f", "d", "l", "c"};
Arrays.sort(b);
for(String s : b) {
System.out.println(s);
}
}
}


以上ruby代码输出是没有排序的

最后修改为



def create_num
@nums = Array.new

#先选择6个红球/33球
while @nums.length < 6
@num = rand(32) + 1
unless @nums.delete(@num)
@nums << @num
end
end

#前面6个排序
# @nums.sort
#或者用这个方法sort!
@nums.sort!
#后选择1个篮球/16球
@nums.sort << rand(15) + 1
end

p create_num


这是需要注意的一点 可能动态代码都不支持直接改变其引用吧

ps==================================
结果 gigix指点 可以用sort!方法 不太用心的原因
### C#Array.Sort 方法用法和功能 C# 中的 `Array.Sort` 方法用于对数组中的元素进行排序。它支持多种重载形式,可以对一维数组、交错数组等进行排序,并且允许自定义比较逻辑[^4]。 #### 基本用法 对于简单的数组类型(如 `int[]` 或 `string[]`),可以直接调用 `Array.Sort()` 方法进行升序排序。例如: ```csharp int[] numbers = { 5, 3, 8, 1, 4 }; Array.Sort(numbers); foreach (var num in numbers) { Console.WriteLine(num); } ``` 上述代码将输出按升序排列的整数数组[^5]。 #### 自定义排序逻辑 当需要实现特定的排序规则时,可以通过实现 `IComparer<T>` 接口来自定义比较逻辑。例如,以下代码展示了如何根据交错数组中每一行的第一个元素进行排序: ```csharp using System; using System.Collections.Generic; class Program { static void Main() { int[][] nums = new int[3][]; nums[0] = new int[] { 3, 2 }; nums[1] = new int[] { 1, 4 }; nums[2] = new int[] { 2, 5 }; Array.Sort(nums, new CustomComparer()); foreach (var row in nums) { Console.WriteLine($"{row[0]} {row[1]}"); } } } public class CustomComparer : IComparer<int[]> { public int Compare(int[] x, int[] y) { return x[0].CompareTo(y[0]); } } ``` #### 对字符串数组排序 由于 `System.String` 实现了 `IComparable` 接口,因此可以直接对字符串数组进行排序[^2]: ```csharp string[] names = { "Lili", "Heicer", "Lucy" }; Array.Sort(names); foreach (string name in names) { Console.WriteLine(name); } ``` #### 处理复杂排序场景 如果需要对数组的部分元素进行排序,可以使用 `Array.Sort` 的重载方法,指定起始索引和元素数量: ```csharp int[] numbers = { 5, 3, 8, 1, 4, 7, 6 }; Array.Sort(numbers, 2, 3); // 对索引从2开始的3个元素排序 foreach (var num in numbers) { Console.WriteLine(num); } ``` #### 注意事项 在某些情况下,可能会遇到排序结果不符合预期的问题。这通常是因为数据类型不匹配或比较逻辑存在错误[^3]。确保在使用自定义比较器时正确实现 `Compare` 方法的逻辑。 ### 示例总结 以下是综合示例,展示如何对不同类型的数组进行排序: ```csharp using System; using System.Collections.Generic; class Program { static void Main() { // 整数数组排序 int[] numbers = { 5, 3, 8, 1, 4 }; Array.Sort(numbers); Console.WriteLine("Sorted integers:"); foreach (var num in numbers) { Console.WriteLine(num); } // 字符串数组排序 string[] names = { "Lili", "Heicer", "Lucy" }; Array.Sort(names); Console.WriteLine("Sorted strings:"); foreach (var name in names) { Console.WriteLine(name); } // 交错数组排序 int[][] nums = new int[3][]; nums[0] = new int[] { 3, 2 }; nums[1] = new int[] { 1, 4 }; nums[2] = new int[] { 2, 5 }; Array.Sort(nums, new CustomComparer()); Console.WriteLine("Sorted jagged array:"); foreach (var row in nums) { Console.WriteLine($"{row[0]} {row[1]}"); } } } public class CustomComparer : IComparer<int[]> { public int Compare(int[] x, int[] y) { return x[0].CompareTo(y[0]); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值