使數據
mat = {{"foobar", 77},
{"faabar", 81},
{"foobur", 22},
{"faabaa", 8},
{"faabian", 88},
{"foobar", 27},
{"fiijii", 52}};
lst = {"foo", "faa"};
現在選擇
r1 = Select[mat, StringMatchQ[lst[[1]], StringTake[#[[1]], 3]] &];
r2 = Select[mat, StringMatchQ[lst[[2]], StringTake[#[[1]], 3]] &];
{{lst[[1]], [email protected][[All, 2]]}, {lst[[2]], [email protected][[All, 2]]}}
給
{{"foo", 126}, {"faa", 177}}
我會盡量做到更多的功能/一般如果我能...
編輯(1)
下面這使得它更普遍。 (使用相同的數據同上):
foo[mat_, lst_] := Select[mat, StringMatchQ[lst, StringTake[#[[1]], 3]] &]
r = Map[foo[mat, #] &, lst];
MapThread[ {#1, Total[#2[[All, 2]]]} &, {lst, r}]
給上述
{{"foo", 126}, {"faa", 177}}
所以現在相同的代碼將工作,如果LST改爲3項,而不是2:
lst = {"foo", "faa", "fii"};
我喜歡它。快速,靈活,正是我所需要的。 – 2012-01-12 16:16:28