Ну, вы, вероятно, хотите Map
, но трудно сказать, не понимая, какова структура данных, с которыми нужно работать. Возможно, вы можете привести пример.
РЕДАКТИРОВАТЬ: В комментарии, пример результата был дан как
dat = {{204424, 11111, SQLDateTime[{1989, 4, 4, 0, 0, 0.}], Null,
"Parthom, Mary, MP", Null, 4147,
"T-00010 AH BH UI", {"T-00010 AH BH UI", "M-14007 LL GG",
"F-Y3710 AH LL UI GG"}, "REMOVED."}, {2040, 11111,
SQLDateTime[{1989, 4, 13, 0, 1, 0.}], Null, "KEVIN, Stevens, STK",
Null, 81238,
"T-00010 ah gh mn", {"T-00010 mn", "M-00100 dd", "P-02320 sd",
"M-14003 ed", "T-Y8800 kf", "kj"}}};
(на самом деле в примере была синтаксическая ошибка, поэтому я исправил ее, как я надеюсь, правильно).
Теперь, если я определю функцию
func = Which[(StringMatchQ[#[[8]], ("*bh*" | "*ah*" | "*gh*"),
IgnoreCase -> True]) == True, 1, True, 0] &;
(обратите внимание, что второе условие для сопоставления может быть записано как True
, см. Документацию Which
), которое делает это
func[dat[[1]]]
(*
-> 1
*)
(обратите внимание, что я немного изменил func
по сравнению с тем, что у вас есть, чтобы он делал то, что, как я полагаю, вы хотели, чтобы он действительно делал) Затем это можно применить к dat
, элементы которого имеют заданную вами форму следующим образом:
Map[func, dat]
(*
-> {1, 1}
*)
Я не уверен, что это то, что вы хотите, я сделал все возможное, чтобы угадать.
EDIT2: В ответ на комментарий о том, что позиция элемента, который должен быть сопоставлен, является переменной, вот один из способов:
ClearAll[funcel]
funcel[p_String] :=
Which[StringMatchQ[p, ("*bh*" | "*ah*" | "*gh*"),
IgnoreCase -> True], 1, True, 0];
funcel[___] := 0;
ClearAll[func];
func[lst_List] := Which[MemberQ[Map[funcel, lst], 1], 1, True, 0]
так что
Map[func, dat]
т {1,1}