可能重复:
首先按Ruby的值对其哈希值进行排序.
我需要订购一个哈希,以便该值是第一优先级,然后当值相同时,它按键排序.
我目前正在使用此代码进行排序,但我没有看到如何使用第二个元素进行sort_by.
Hash[@card_value_counts.sort_by{|k, v| k * -1}]
Run Code Online (Sandbox Code Playgroud)
我正在寻找的例子是:
pre_sorted = {10=>1, 9=>2, 3=>2, 2=>1, 1=>1}
sorted = {9=>2, 3=>2, 10=>1, 2=>1, 1=>1}
pre_sorted = {12=>2, 10=>3, 9=>4, 5=>3}
sorted = {9=>4, 10=>3, 5=>3, 12=>2}
Run Code Online (Sandbox Code Playgroud) 在我的.h:
@class PanelController;
@interface PanelController : NSWindowController <NSWindowDelegate>
{
NSURL *zURL;
}
@property (nonatomic, assign) NSURL *zURL;
@end
Run Code Online (Sandbox Code Playgroud)
在我的.m:
@synthesize zURL;
...
- (IBAction)openBrowser:(id)sender {
self.zUrl = [zOpenPanel URL];
}
Run Code Online (Sandbox Code Playgroud)
错误:
zURL not found on object PanelController
Run Code Online (Sandbox Code Playgroud) 我有一个对象我想变成一个实例变量.这有效:
ZipFile *newZipFile = [[ZipFile alloc] initWithFileName:zipPath mode:ZipFileModeCreate];
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将其更改为此时它不起作用:
.H:
@interface PanelController : NSWindowController <NSWindowDelegate> {
ZipFile *_zipFile;
}
@property (nonatomic, assign) ZipFile *zipFile;
Run Code Online (Sandbox Code Playgroud)
.M:
@synthesize zipFile = _zipFile;
...
// get a syntax error here
zipFile = [[ZipFile alloc] initWithFileName:zipPath mode:ZipFileModeCreate];
Run Code Online (Sandbox Code Playgroud)
编辑:我能够通过将其放在我的界面并摆脱@property来解决这个问题:
ZipFile *newZipFile;
Run Code Online (Sandbox Code Playgroud)
我想我不能将setter和getter分配给任何对象?但是如果我这样做,为什么它不会起作用:
ZipFile *zipFile;
Run Code Online (Sandbox Code Playgroud) 这真的让我感到困惑,似乎一次又一次地遇到ruby原生数据类型中的方法,它们做同样的事情(本质上),但却有不同的名称.如果ruby和ruby社区强烈鼓励鸭子打字,为什么这些方法在各种类型中的命名一致?