分类: Python/Ruby
2012-04-26 11:37:06
edaplayer2019-01-14 11:29:16
goodpaperman:asorti 与 asort 唯一不同在于它排序的是数组(实际上是map)之索引,并将其赋于 b 数组。
总结一下:如果想要得到排序的结果,则必需使用 for(i=1;i<length;++i) 的形式;
因为 for(i in a) 的形式不能有序输出结果。而对于前者,如果 a 不是简单数组(map,例如 a["red"] = tiger),
则排序后 print a[i] 是无法取得值的,更无法取得索引,只能使用后一种形式,但此时输出又不是排序的;
所以 asort(a,b),然后以第一种形式遍历 b,可以得到排序后的值;
而 asorti(a,b),以第一种形式遍历 b,可以得到排序后的索引,再代入未改变的 a,则可以得到索引对应的值,
即:print i "," b[i] "," a[b[i]]
请问第一种形式和后一种形式是指什么?
回复 | 举报edaplayer2019-01-14 10:28:52
goodpaperman:asort 的例子:“把排序后的下标存入新生成的数组b中,丢弃数组a下标值”,此处有误,
据 gawk 的 man page 所说应该是:a 数组原封未动,b数组首先拷贝自 a 数组,然后在 b 数组上排序。
例子中无法输出 a 数组的原因是,a 的索引为 12,23,78,与传入的 1,2,3 不匹配,故没有内容输出
正解
回复 | 举报edaplayer2019-01-14 10:28:49
goodpaperman:asort 的例子:“把排序后的下标存入新生成的数组b中,丢弃数组a下标值”,此处有误,
据 gawk 的 man page 所说应该是:a 数组原封未动,b数组首先拷贝自 a 数组,然后在 b 数组上排序。
例子中无法输出 a 数组的原因是,a 的索引为 12,23,78,与传入的 1,2,3 不匹配,故没有内容输出
正解
回复 | 举报goodpaperman2015-01-29 19:42:43
asorti 与 asort 唯一不同在于它排序的是数组(实际上是map)之索引,并将其赋于 b 数组。
总结一下:如果想要得到排序的结果,则必需使用 for(i=1;i<length;++i) 的形式;
因为 for(i in a) 的形式不能有序输出结果。而对于前者,如果 a 不是简单数组(map,例如 a["red"] = tiger),
则排序后 print a[i] 是无法取得值的,更无法取得索引,只能使用后一种形式,但此时输出又不是排序的;
所以 asort(a,b),然后以第一种形式遍历 b,可以得到排序后的值;
而 asorti(a,b),以第一种形式遍历 b,可以得到排序后的索引,再代入未改变的 a,则可以得到索引对应的值,
即:print i "," b[i] "," a[b[i]]
goodpaperman2015-01-29 19:34:48
asort 的例子:“把排序后的下标存入新生成的数组b中,丢弃数组a下标值”,此处有误,
据 gawk 的 man page 所说应该是:a 数组原封未动,b数组首先拷贝自 a 数组,然后在 b 数组上排序。
例子中无法输出 a 数组的原因是,a 的索引为 12,23,78,与传入的 1,2,3 不匹配,故没有内容输出