我需要一些帮助来有效地匹配数据...
这是我的问题: 从我读入的文件中读取一些元素,这些元素的ID与另一个具有XYZ坐标的条目(节点)相关。
它看起来像这样(每个字段用空格分隔,所以条目是Field0 [空] Field1 [空白]等等)
ELEMENT 1 24
ELEMENT 2 89
ELEMENT 11 123
NODE 24 0.1 3.5 45.6
NODE 89 2.5 23.8 4.9
NODE 123 11.4 3.7 5.7
所以我过去所做的就是以相同的顺序读取元素。对于节点,我分配了一个与可能出现的最大节点ID数相同的数组,并将XYZ坐标放在节点ID的索引下:
if (strstr(Field0,"ELEMENT") ){
Elem[NumElem].ID = atoi(Field1);
Elem[NumElem].NID = atoi(Field2);
NumElem++;
}
if (strstr(Field0,"NODE") ){
Index = atoi(Field1);
Node[Index].ID = Index ;
Node[Index].XYZ[0] = atof(Field2);
Node[Index].XYZ[1] = atof(Field3);
Node[Index].XYZ[2] = atof(Field4);
}
for (i=0;i<NumElem;i++){
Elem[i].Coord[0] = Node[ Elem[i].NID ].XYZ[0];
Elem[i].Coord[1] = Node[ Elem[i].NID ].XYZ[1];
Elem[i].Coord[2] = Node[ Elem[i].NID ].XYZ[2];
}
(希望该片段没有错误,因为我必须删除一些条目以使其对其他人更具可读性)
之后我释放了Node并将所有数据存储在struct Elem中。
只有当所有节点ID在整个数据中都是唯一的时,上述方式才有效。
现在数据可以拆分成几个文件。在每个文件中,ID都是唯一的,但对于整个数据集,它们不是唯一的。 因此,上面的示例可以在具有相同元素和节点ID的不同文件中多次出现,但它们不是相同或相同的条目,因为坐标可能不同。
由于某些其他原因,我无法按文件解析整个数据集文件,以将数据放入上述结构中。
当然,我可以通过嵌套一些for循环来检查文件ID和节点ID中的每个元素然后循环遍历整个节点条目以找到匹配的数据,这是非常强大的方式,但这将非常慢...
有没有人对如何解决这个问题有任何暗示?