我正在尝试实施hypergraph。我想使用(冻结)集合作为哈希的关键。我想做以下或类似的事情。
data[some_set.freeze]
然而,它并不是很有效。这样做的:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView txtLon;
private TextView txtLt;
private TextView txtProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnFetch = (Button) findViewById(R.id.btnFetch);
btnFetch.setOnClickListener(this);
txtLon = (TextView) findViewById(R.id.tvLon);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.btnFetch){
WebView wv =(WebView) findViewById(R.id.webView);
StringBuilder html = new StringBuilder();
html.append("<html>");
html.append("<head>");
html.append("<style>body{background:red !important}</style>");
html.append("</head>");
html.append("<body>");
html.append("</body></html>");
wv.loadDataWithBaseURL("http://google.com",html.toString(),"text/html","UTF-8","");;
wv.setWebViewClient(new WebViewClient());
}
}
}
似乎会导致错误。
答案 0 :(得分:1)
只要您不公开或共享data
数组,就没有理由冻结它。
您可以使用Array
的实例作为键。但是你必须确保所有数组都以相同的方式排序:
data = {
['a', 'b', 'c'] => [1, 2, 3],
['a', 'b', 'd'] => [1, 2, 4],
['a', 'b'] => [1, 2],
['a', 'b', 'e', 'f'] => [1, 2, 5, 6]
}
data[['a', 'b']]
#=> [1, 2]
或者像评论中提到的sawa:在使用data
哈希之前,使用Set
来避免对数组进行排序可能是有意义的。使用Set
,您的实现可能如下所示:
require 'set'
data = {
Set.new(['a', 'b', 'c']) => [1, 2, 3],
Set.new(['a', 'b', 'd']) => [1, 2, 4],
Set.new(['a', 'b']) => [1, 2],
Set.new(['a', 'b', 'e', 'f']) => [1, 2, 5, 6]
}
data[Set.new(['b', 'a'])] # Note that the order doesn't match
#=> [1, 2]