Allow dropping columns. (#3107)

`drop` is used for removing the last row. Passing a number allows dropping N rows.
Here we introduce the same logic for dropping columns instead.

You can certainly remove columns by using `reject`, however, there could be cases
where we are interested in removing columns from tables that contain, say, a big
number of columns. Using `reject` becomes impractical, especially when you don't
care about the column names that could either be known or not known when exploring
tables.

```
> echo [[lib, extension]; [nu-core, rs] [rake, rb]]
─────────┬───────────
   lib   │ extension
─────────┼───────────
 nu-core │ rs
 rake    │ rb
─────────┴───────────
```

```
> echo [[lib, extension]; [nu-core, rs] [rake, rb]] | drop column
─────────
   lib
─────────
 nu-core
 rake
─────────
```
This commit is contained in:
Andrés N. Robalino
2021-02-25 14:37:21 -06:00
committed by GitHub
parent 84169a91ff
commit 19d5f782cc
6 changed files with 153 additions and 29 deletions

View File

@ -1,23 +1,68 @@
use nu_test_support::{nu, pipeline};
#[test]
fn drop_rows() {
fn columns() {
let actual = nu!(
cwd: "tests/fixtures/formats",
r#"echo '[{"foo": 3}, {"foo": 8}, {"foo": 4}]' | from json | drop 2 | get foo | math sum "#
cwd: ".", pipeline(r#"
echo [
[arepas, color];
[3, white]
[8, yellow]
[4, white]
]
| drop column
| get
| count
"#)
);
assert_eq!(actual.out, "1");
}
#[test]
fn more_columns_than_table_has() {
let actual = nu!(
cwd: ".", pipeline(r#"
echo [
[arepas, color];
[3, white]
[8, yellow]
[4, white]
]
| drop column 3
| get
| empty?
"#)
);
assert_eq!(actual.out, "true");
}
#[test]
fn rows() {
let actual = nu!(
cwd: ".", pipeline(r#"
echo [
[arepas];
[3]
[8]
[4]
]
| drop 2
| get arepas
| math sum
"#)
);
assert_eq!(actual.out, "3");
}
#[test]
fn drop_more_rows_than_table_has() {
let actual = nu!(
cwd: ".", pipeline(
r#"
date | drop 50 | count
"#
));
fn more_rows_than_table_has() {
let actual = nu!(cwd: ".", "date | drop 50 | count");
assert_eq!(actual.out, "0");
}