diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/in/DataSetColumnInProcessor.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/in/DataSetColumnInProcessor.java index 9290b923976b8aa6ec30481cb6590ffdbe3712be..64f363db00f3bc2ea52338dc921b916e67e1b39b 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/in/DataSetColumnInProcessor.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/in/DataSetColumnInProcessor.java @@ -1,10 +1,16 @@ package org.tinygroup.tinyscript.dataset.in; +import java.util.HashSet; +import java.util.Set; + import org.tinygroup.tinyscript.dataset.DataSetColumn; +import org.tinygroup.tinyscript.dataset.Field; import org.tinygroup.tinyscript.expression.InExpressionProcessor; public class DataSetColumnInProcessor implements InExpressionProcessor { + private DataSetColumnCache colCache; + @Override public boolean isMatch(Object collection) throws Exception { return collection instanceof DataSetColumn; @@ -13,13 +19,42 @@ public class DataSetColumnInProcessor implements InExpressionProcessor { @Override public boolean checkIn(Object collection, Object item) throws Exception { DataSetColumn colData = (DataSetColumn) collection; - for (int i = 0; i < colData.getRows(); i++) { - if (item == colData.getData(colData.isIndexFromOne() ? i + 1 : i) - || item.equals(colData.getData(colData.isIndexFromOne() ? i + 1 : i))) { - return true; - } + if (colCache == null || !colCache.getField().equals(colCache.getField())) { + colCache = new DataSetColumnCache(colData); } - return false; + return colCache.isExist(item); } + class DataSetColumnCache { + private Field field; + private Set colCache; + + DataSetColumnCache(DataSetColumn colData) throws Exception { + colCache = new HashSet(); + for (int i = 0; i < colData.getRows(); i++) { + colCache.add(colData.getData(colData.isIndexFromOne() ? i + 1 : i)); + } + this.field = colData.getField(); + } + + public boolean isExist(Object item) { + return colCache.contains(item); + } + + public Field getField() { + return field; + } + + public void setField(Field field) { + this.field = field; + } + + public Set getColCache() { + return colCache; + } + + public void setColCache(Set colCache) { + this.colCache = colCache; + } + } } diff --git a/org.tinygroup.tinyscript/src/test/resources/dataSetExample/dataSetRemove.tsf b/org.tinygroup.tinyscript/src/test/resources/dataSetExample/dataSetRemove.tsf new file mode 100644 index 0000000000000000000000000000000000000000..27a83ea7cc68f7a2615c2493bb26bb0ed2cde282 --- /dev/null +++ b/org.tinygroup.tinyscript/src/test/resources/dataSetExample/dataSetRemove.tsf @@ -0,0 +1,6 @@ +dataSet = readTxt("/dataSetExample/data1.txt"); +dataSet1 = readTxt("/dataSetExample/data2.txt"); +println(dataSet.remove(()->{ + return name in dataSet1.name; +})); +