Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
5ffaf4c2
R
Rust
项目概览
int
/
Rust
接近 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
5ffaf4c2
编写于
1月 09, 2018
作者:
K
kennytm
浏览文件
操作
浏览文件
下载
差异文件
Rollup merge of #47259 - sfackler:map-remove-entry, r=dtolnay
Add HashMap::remove_entry Implements #46344 r? @dtolnay
上级
6648dcd3
1fc6ad56
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
1 deletion
+49
-1
src/libstd/collections/hash/map.rs
src/libstd/collections/hash/map.rs
+49
-1
未找到文件。
src/libstd/collections/hash/map.rs
浏览文件 @
5ffaf4c2
...
...
@@ -1241,6 +1241,46 @@ pub fn remove<Q: ?Sized>(&mut self, k: &Q) -> Option<V>
self
.search_mut
(
k
)
.into_occupied_bucket
()
.map
(|
bucket
|
pop_internal
(
bucket
)
.1
)
}
/// Removes a key from the map, returning the stored key and value if the
/// key was previously in the map.
///
/// The key may be any borrowed form of the map's key type, but
/// [`Hash`] and [`Eq`] on the borrowed form *must* match those for
/// the key type.
///
/// [`Eq`]: ../../std/cmp/trait.Eq.html
/// [`Hash`]: ../../std/hash/trait.Hash.html
///
/// # Examples
///
/// ```
/// #![feature(hash_map_remove_entry)]
/// use std::collections::HashMap;
///
/// # fn main() {
/// let mut map = HashMap::new();
/// map.insert(1, "a");
/// assert_eq!(map.remove_entry(&1), Some((1, "a")));
/// assert_eq!(map.remove(&1), None);
/// # }
/// ```
#[unstable(feature
=
"hash_map_remove_entry"
,
issue
=
"46344"
)]
pub
fn
remove_entry
<
Q
:
?
Sized
>
(
&
mut
self
,
k
:
&
Q
)
->
Option
<
(
K
,
V
)
>
where
K
:
Borrow
<
Q
>
,
Q
:
Hash
+
Eq
{
if
self
.table
.size
()
==
0
{
return
None
;
}
self
.search_mut
(
k
)
.into_occupied_bucket
()
.map
(|
bucket
|
{
let
(
k
,
v
,
_
)
=
pop_internal
(
bucket
);
(
k
,
v
)
})
}
/// Retains only the elements specified by the predicate.
///
/// In other words, remove all pairs `(k, v)` such that `f(&k,&mut v)` returns `false`.
...
...
@@ -3040,13 +3080,21 @@ fn test_is_empty() {
}
#[test]
fn
test_
pop
()
{
fn
test_
remove
()
{
let
mut
m
=
HashMap
::
new
();
m
.insert
(
1
,
2
);
assert_eq!
(
m
.remove
(
&
1
),
Some
(
2
));
assert_eq!
(
m
.remove
(
&
1
),
None
);
}
#[test]
fn
test_remove_entry
()
{
let
mut
m
=
HashMap
::
new
();
m
.insert
(
1
,
2
);
assert_eq!
(
m
.remove_entry
(
&
1
),
Some
((
1
,
2
)));
assert_eq!
(
m
.remove
(
&
1
),
None
);
}
#[test]
fn
test_iterate
()
{
let
mut
m
=
HashMap
::
with_capacity
(
4
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录