Fox 矩陣索引,可以使用 0 並獲得完整的切片:
m = [ 1 2 , 3 4];
m[0,1]; // [1, 3]
對於數據表,這也適用:
test = new table("test", <BR />add rows(10), <BR />new column("col1",Character, set each value({"A","B","C"}[random integer(3)])),<BR />new column("col2", set each value(random uniform(5))));
test[4,0]
對於列表的列表,這是不可能的:
list= {{"A", 3},{"B", 5}};
list[0,1]Sure, there are many lists of lists where such slicing is not possible, like {{"A", 3},{"B"}}.
另一方面,有很多列表允許它。
真正有趣的地方是:關聯數組的關聯數組。
與列表一樣,關聯數組的概念比我們使用矩陣或資料表所做的更靈活 - 因此切片不適用於它們。但與列表一樣,有關聯數組可以進行切片......
JSL 中是否有一個函數(例如myAssociativeArray[0, "weight"] )可以完成此工作?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
dt << Save( "$DOWNLOADS/test.json" );
// for sake of simplicity we accept to lose 1x ROBERT
myIndex=dt[0,"name"]
myAssociativeArray = Associative Array(myIndex,ParseJSON(Load text file ( "$DOWNLOADS/test.json")));
<BR />// cool, but not what we want
mapToWeight = Transform Each({{key, value}}, aa, value["weight"]);
SliceAssociativeArray= Function({aa, indexname},
Transform Each({value}, aa << get values, value[indexname])
);
SliceAssociativeArray(myAssociativeArray ,"weight") //myAssociativeArray [0, "weight"]
不同的資料結構有不同的用途,對於關聯數組(我認為),這意味著存儲唯一的鍵並快速獲取這些鍵的值(它存儲鍵值對)。 Transform Each 是一個不錯的選擇,只需更改輸出即可
weights = Transform Each({{key, value}}, aa, Output("List"),
value["weight"]
);
另一個很酷的技巧 - 非常有用:)
從實用性上來說,我覺得
weights = Transform Each({{key, value}}, aa, Output("List"),
value["weight"]
);和
Transform Each({value}, aa << get values, value["weight"])與原始貼文具有可比較的價值
……距離aa[0, "重量"]很遠
想像一下,您想要取得所有aa[0,"2024",0,0,"date"]。
我不確定這應該“查詢” aa[0,"2024",0,0,"date"]。如果您只想取得「0」索引,則可以將值儲存到關聯數組中,鍵是列名,值是行值的清單。
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
aa = Associative Array();
For Each({colname}, dt << Get Column Names("String"),
aa[colname] = As List(Column(dt, colname) << get values);
);
一般來說,如果我想以類似表格的格式儲存數據,並且可以像表格一樣訪問,我只會使用(私有)JMP 資料表。