以下是可能的属性列表:
In[1]:= properties={"red","green","blue","big","small","rounded","spiky"};
这里是具有这些属性的对象列表
In[2]:= list={{"blue","big","rounded"},{"red","small","spiky"},
{"red","big","rounded"},{"blue","small","spiky"}};
您可以使用Select找到所有具有“蓝色”属性的对象
In[3]:= Select[list, MemberQ[#,"blue"]&]
Out[3]= {{blue,big,rounded},{blue,small,spiky}}
这可以包装成一个函数。虽然我将如何编写该函数将取决于您计划的数据结构和用法。
实际上,我只是重读了您的问题,您有一个具有某些属性的对象列表,并且您想按名称引用这些对象。所以你可能想要更像
In[1]:= listProperties["A"]:={"blue","big","rounded"}
listProperties["B"]:={"red","small","spiky"}
listProperties["C"]:={"red","big","rounded"}
listProperties["D"]:={"blue","small","spiky"}
上面我定义了一些与某些字符串相关的属性。您不必在上面或下面使用字符串,如果需要,您可以创建比这更好的结构。您还可以创建一个构造函数来创建上述内容,这样的构造函数还可以检查提供的属性列表是否具有正确的形式 - 即没有矛盾的属性,都在已知属性列表中等等......
然后我们定义一个函数来测试一个对象/字符串是否具有与之关联的特定属性
In[2]:= hasProperty[obj_, property_]:=MemberQ[listProperties[obj],property]
如果listProperties[obj] 没有与之关联的定义/规则,您可能希望返回错误或警告消息。
使用Select 查找列表中具有关联属性“blue”的所有“对象”:
In[3]:= Select[{"A","B","C","D"}, hasProperty[#,"blue"]&]
Out[3]= {A,D}
还有其他方法(可能是更好的方法)来设置这样的数据结构。但这是 Mathematica 中最简单的方法之一。