Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
4dcd8f01
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4dcd8f01
编写于
12月 11, 2008
作者:
F
Frederick Cheung
提交者:
David Heinemeier Hansson
12月 15, 2008
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make delete_if/reject faster and fix other mutators
[#1559 state:committed] Signed-off-by:
N
Jeremy Kemper
<
jeremy@bitsweat.net
>
上级
49306cca
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
61 addition
and
13 deletion
+61
-13
activesupport/lib/active_support/ordered_hash.rb
activesupport/lib/active_support/ordered_hash.rb
+24
-13
activesupport/test/ordered_hash_test.rb
activesupport/test/ordered_hash_test.rb
+37
-0
未找到文件。
activesupport/lib/active_support/ordered_hash.rb
浏览文件 @
4dcd8f01
...
...
@@ -18,19 +18,13 @@ def []=(key, value)
end
def
delete
(
key
)
array_index
=
has_key?
(
key
)
&&
index
(
key
)
if
array_index
@keys
.
delete_at
(
array_index
)
if
has_key?
key
index
=
@keys
.
index
(
key
)
@keys
.
delete_at
index
end
super
end
def
delete_if
super
sync_keys!
self
end
def
reject!
super
sync_keys!
...
...
@@ -41,9 +35,6 @@ def reject(&block)
dup
.
reject!
(
&
block
)
end
alias_method
:super_keys
,
:keys
private
:super_keys
def
keys
@keys
end
...
...
@@ -68,10 +59,30 @@ def each
keys
.
each
{
|
key
|
yield
[
key
,
self
[
key
]]}
end
alias_method
:each_pair
,
:each
def
clear
super
@keys
.
clear
self
end
def
shift
k
=
@keys
.
first
v
=
delete
(
k
)
[
k
,
v
]
end
def
merge
(
other_hash
)
result
=
dup
other_hash
.
each
{
|
k
,
v
|
result
[
k
]
=
v
}
result
end
private
def
sync_keys!
(
@keys
-
super_keys
).
each
{
|
k
|
@keys
.
delete
(
k
)
}
@keys
.
delete_if
{
|
k
|
!
has_key?
(
k
)
}
end
end
end
...
...
activesupport/test/ordered_hash_test.rb
浏览文件 @
4dcd8f01
...
...
@@ -36,9 +36,11 @@ def test_delete
@ordered_hash
[
key
]
=
value
assert_equal
@keys
.
length
+
1
,
@ordered_hash
.
length
assert_equal
@ordered_hash
.
keys
.
length
,
@ordered_hash
.
length
assert_equal
value
,
@ordered_hash
.
delete
(
key
)
assert_equal
@keys
.
length
,
@ordered_hash
.
length
assert_equal
@ordered_hash
.
keys
.
length
,
@ordered_hash
.
length
assert_nil
@ordered_hash
.
delete
(
bad_key
)
end
...
...
@@ -84,6 +86,17 @@ def test_each_with_index
@ordered_hash
.
each_with_index
{
|
pair
,
index
|
assert_equal
[
@keys
[
index
],
@values
[
index
]],
pair
}
end
def
test_each_pair
values
=
[]
keys
=
[]
@ordered_hash
.
each_pair
do
|
key
,
value
|
keys
<<
key
values
<<
value
end
assert_equal
@values
,
values
assert_equal
@keys
,
keys
end
def
test_delete_if
(
copy
=
@ordered_hash
.
dup
).
delete
(
'pink'
)
assert_equal
copy
,
@ordered_hash
.
delete_if
{
|
k
,
_
|
k
==
'pink'
}
...
...
@@ -103,4 +116,28 @@ def test_reject
assert_equal
copy
,
@ordered_hash
assert
!
new_ordered_hash
.
keys
.
include?
(
'pink'
)
end
def
test_clear
@ordered_hash
.
clear
assert_equal
[],
@ordered_hash
.
keys
end
def
test_merge
other_hash
=
ActiveSupport
::
OrderedHash
.
new
other_hash
[
'purple'
]
=
'800080'
other_hash
[
'violet'
]
=
'ee82ee'
merged
=
@ordered_hash
.
merge
other_hash
assert_equal
merged
.
length
,
@ordered_hash
.
length
+
other_hash
.
length
assert_equal
@keys
+
[
'purple'
,
'violet'
],
merged
.
keys
@ordered_hash
.
merge!
other_hash
assert_equal
@ordered_hash
,
merged
assert_equal
@ordered_hash
.
keys
,
merged
.
keys
end
def
test_shift
pair
=
@ordered_hash
.
shift
assert_equal
[
@keys
.
first
,
@values
.
first
],
pair
assert
!
@ordered_hash
.
keys
.
include?
(
pair
.
first
)
end
end
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录