Có phương pháp nào tốt hơn để giải quyết các vấn đề đó không?
Tôi thường khuyên bạn nên làm việc với các mảng thay vì danh sách.
Trong CF9, vòng lặp tương tự như vòng lặp của bạn cũng tốt như vậy. Bạn có thể làm cho một chức năng tiện ích ra khỏi nó nếu bạn cần nó nhiều hơn một lần. Cái này tránh StructKeyList()
để có thể đối phó với tất cả các loại chìa khóa, không phụ thuộc vào một ký tự phân cách:
<cfscript>
function GetNumericKeys(struct) {
var keys = struct.keys();
var result = ArrayNew(1);
var key = "";
while (keys.hasNext()) {
key = keys.next();
if (IsNumeric(key)) ArrayAppend(result, key);
}
return result;
}
</cfscript>
và
<cfset nkeys = GetNumericKeys(st)>
Trong CF11 bạn có thể trở nên phức tạp hơn một chút (thử nghiệm trên CF11, không thể nói cách CF10 xử lý mã này).
<cfscript>
numericIDs = arrayFilter(structKeyArray(st), function (key) {
return IsNumeric(key);
});
</cfscript>
Để đảm bảo các phím số nguyên, sử dụng:
<cfscript>
numericIDs = arrayFilter(structKeyArray(st), function (key) {
return Int(key) eq key;
});
</cfscript>
Tôi muốn sử dụng một mảng chứ không phải là một danh sách, nhưng khác hơn thế, cách tiếp cận này có vẻ tốt đẹp. Có những lựa chọn tốt hơn với các phiên bản mới hơn của CF, nhưng nếu yer bị mắc kẹt trên CF9, do đó, được nó. –