我需要创建一个由满足特定条件的行号组成的数组。
假设我有一个日期列表:
01.03.2019
01.07.2019
2020年3月1日
2019年3月30日
01.03.2019
01.06.2019
现在,假设我需要01.03.2019的行号,我的数组将是[1,5]。
有什么体面的方法吗?我的列表有数千个条目,因此我想遍历每个单元格将花费一些时间。任何精益解决方案将不胜感激。
我找到了该线程,但是答案尚未得到验证:Is it possible to fill an array with row numbers which match a certain criteria without looping?
答案 0 :(得分:2)
如果您使用数组而不是工作表工作,它不会“花一会儿”。
Sub FillArray()
Dim myarray As Variant
Dim i As Long
ReDim myarray(0 To 0)
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1).Value = "01.03.2019" Then 'Value to find
ReDim Preserve myarray(0 To UBound(myarray) + 1)
myarray(UBound(myarray) - 1) = i
End If
Next i
For i = 0 To UBound(myarray)
Debug.Print myarray(i)
Next i
End Sub
答案 1 :(得分:0)
如果您的值在A列中,则会用匹配的行号填充数组并将其打印到立即窗口:
public void printTree(Node<String> node, int depth, int columnSize) {
// Print leaf
if(node.children.size() == 0) {
printNode(node, columnSize);
System.out.print("|\n");
} else {
// Print current node
printNode(node, columnSize);
// Print all nodes of this level recursively
printTree(node.children.get(0), depth + 1, columnSize);
// Print all children current node recursively
for (int i = 1; i < node.children.size(); i++) {
printLeading(depth + 1, columnSize);
printTree(node.children.get(i), depth + 1, columnSize);
}
}
}
public void printLeading(int depth, int columnSize) {
// Print the leading white spaces of column at a certain depth
// Each node (depth) takes the column size + 2 characters (= "| ")
for (int i = 0; i < depth * columnSize + depth * 2; i++) {
System.out.print(" ");
}
}
public void printNode(Node<String> node, int columnSize) {
int trailing = columnSize - node.getData().length();
System.out.print("| " + node.data);
// Print the leading white spaces in the column
for (int i = 0; i < trailing; i++) {
System.out.print(" ");
}
}